我有一个事件数据库,每天晚上都会更新。单个事件包含三个(或更多)表中的信息。最近更新量已经导致我的MySQL引擎非常慢,直到我插入新事件时,其他查询被冻结。为了加快速度,我想进行一系列批量查询,而不是分别执行每个批量查询,而我认为这是很大一部分开销。棘手的MySQL批量查询
的问题是,因为数据在多个表传播,这是我必须做的,插入一个事件:
(in Mysql) INSERT INTO 'locations' (...) VALUES (...) ON DUPLICATE KEY UPDATE ...
(in php get the last inserted id into variable $locationID)
(in Mysql) INSERT INTO 'event_info' (...) VALUES ($locationID, ...) ON DUPLICATE KEY UPDATE...
(in php get the last inserted id into variable $eventID)
(in Mysql) INSERT INTO 'event_times' (...) VALUES ($eventID, ...) ON DUPLICATE KEY UPDATE...
我不是在设计表中寻求帮助,但你可以看到插入单个事件需要至少三个插入,每个插入取决于从前一个获取id。这就是为什么我不知道从哪里开始将其作为批量请求。将这个过程设计成批量请求的任何帮助都会很棒,谢谢!
编辑:我可能已经有位置或事件信息之前,这就是为什么在上的重复密钥更新的部分是有这样,如果它已经在数据库中,我得到旧的标识。我不知道,直到插入,如果它是新的数据,或者它已经存在于数据库中。 (因为这一点,除非我误解,否则我不能做预先分配ID的事情,因为每次都假设一个新ID。)
你在使用什么数据库引擎?请记住,MyISAM为每个插入锁定表。 – 2012-01-17 22:30:41
这是MyISAM,但其他查询被冻结到一个完全不同的表,而不是这会影响,所以我认为这只是所有插入和索引更新的整体应变。 – hackartist 2012-01-17 22:39:58