2012-12-06 123 views
3

處理需要從數據庫傳輸大量數據的應用程序。它包括SELECT和UPDATE查詢(即讀取和寫入數據庫)。MySQL基準測試:1個查詢返回1000行VS 1000單行查詢

首先,我需要獲得所有產品的清單(約1000個SKU)。 SELECT查詢非常簡單:

SELECT 
    * 
FROM 
    `my_db`.`products` 

然後對每個產品進行一些自動更新。更新查詢是這樣的:

UPDATE 
    `my_db`.`products` 
SET 
    `updated` = NOW(), 
    `mods` = `mods` + 1, 
    /* a couple more updated fields here, if needed */ 

現在的問題是哪一個會更快/更好地執行:即一次與所有記錄操縱單個查詢,或PHP循環(如foreachwhile )與每個產品分開使用(1000個單行查詢)?當然,後者需要WHERE model = 'ABC'LIMIT 1

爲了使事情更加複雜(和全面的),想其他影響的標準,例如:

  • 如果是針對不同的行數:100或10萬?
  • 如果涉及多個表格怎麼辦?查看下面的JOINed查詢的示例。

SELECT 
    * 
FROM 
    `my_db`.`table1` AS `t1` 
    INNER JOIN `my_db`.`table2` AS `t2` ON `t1`.`id` = `t2`.`fk` 
    INNER JOIN `my_db`.`table3` AS `t3` ON `t2`.`id` = `t3`.`fk` 
    /* Etc. */ 

有一般的「經驗法則」來決定哪些方法是這樣或那樣的情況更好?

+0

「這是SELECT查詢」 - 我沒有看到查詢? –

+0

我不能爲我的生活看到這個SELECT查詢 – Dale

+0

所以你的意思是'重複1000次(SELECT; UPDATE;)'與'SELECT;重複1000次(UPDATE)'?並且沒有選擇查詢....... – luiges90

回答

2

一個很好的發言,其中包括1000條記錄將永遠是效率比執行1000個查詢,只要你的SQL語句寫得很好。