2012-06-02 88 views
2

我有一個php腳本連續運行幾個小時,每隔幾秒我有新的數據保存在數據庫中。因此,我可以選擇在數據可用時存儲新數據,或者將它們收集到數組中,並在我有100或500時保存它們。如果我是正確的,php無法將多個插入查詢發送到數據庫,因此上述兩個選項將採用完全相同的時間量來保存。數據庫查詢速度

我錯了,還是比另一個快?也許有比這更快的第三種解決方案?

+0

只是好奇,你最終使用LOAD DATA INFILE或多記錄INSERT? – bobwienholt

+0

多插入。每一秒都是寶貴的,所以我不想浪費時間寫一個文件然後再讀回來 – slash197

回答

2

你可以使用下面的語法同時插入多行:

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對於導入大量數據非常有效。

0

兩者都不會更快。但是,如果您使用批量插入並將插入包裝在事務中,則它將顯着加快。

BEGIN TRANSACTION; 
INSERT INTO ... 
INSERT INTO ... 
INSERT INTO ... 
COMMIT; 

這隻有在存儲引擎允許事務處理的情況下才有效。所以最好使用InnoDB而不是MyISAM。

0

我推薦脫機批處理存儲過程選項。這樣,你會:

  • 保存連接倍,每天都在發生腳本調用,否則(我假設是這樣,但我沒有看到你的腳本)
  • 保存PHP和MySQL
  • 之間的通信時間
  • 保存解析解釋,因爲所有提交的數據將SQL引擎中一次處理

RGDS。