我有一個php腳本連續運行幾個小時,每隔幾秒我有新的數據保存在數據庫中。因此,我可以選擇在數據可用時存儲新數據,或者將它們收集到數組中,並在我有100或500時保存它們。如果我是正確的,php無法將多個插入查詢發送到數據庫,因此上述兩個選項將採用完全相同的時間量來保存。數據庫查詢速度
我錯了,還是比另一個快?也許有比這更快的第三種解決方案?
我有一個php腳本連續運行幾個小時,每隔幾秒我有新的數據保存在數據庫中。因此,我可以選擇在數據可用時存儲新數據,或者將它們收集到數組中,並在我有100或500時保存它們。如果我是正確的,php無法將多個插入查詢發送到數據庫,因此上述兩個選項將採用完全相同的時間量來保存。數據庫查詢速度
我錯了,還是比另一個快?也許有比這更快的第三種解決方案?
你可以使用下面的語法同時插入多行:
INSERT INTO foo
(a, b, c)
VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9)
,或者您可以將數據轉儲到分隔的文件,你得到它,當你在100行左右該文件使用LOAD DATA INFILE(http://dev.mysql.com/doc/refman/5.5/en/load-data.html)來執行插入操作。我發現LOAD DATA INFILE對於導入大量數據非常有效。
兩者都不會更快。但是,如果您使用批量插入並將插入包裝在事務中,則它將顯着加快。
BEGIN TRANSACTION;
INSERT INTO ...
INSERT INTO ...
INSERT INTO ...
COMMIT;
這隻有在存儲引擎允許事務處理的情況下才有效。所以最好使用InnoDB而不是MyISAM。
我推薦脫機批處理存儲過程選項。這樣,你會:
RGDS。
只是好奇,你最終使用LOAD DATA INFILE或多記錄INSERT? – bobwienholt
多插入。每一秒都是寶貴的,所以我不想浪費時間寫一個文件然後再讀回來 – slash197