我有一個事件數據庫,每天晚上都會更新。單個事件包含三個(或更多)表中的信息。最近更新量已經導致我的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