2012-10-24 59 views
1

我必須刪除包含數組中的id的記錄。SQL效率和速度

我只是不知道哪個更好用。哪個更快,更高效?

代碼1

$array = array('123','456','789' ...)//over 900 entries 
$id = implode(',', $array); 
$sql = 'DELETE FROM email WHERE id IN ('.$id.')'; 
//execute sql 

CODE2

$array = array('123','456','789' ...)//over 900 entries 
for($x=0;$x<count($array);$x++){ 
    $sql='DELETE FROM email WHERE id = '.$array[$x].' '; 
    //execute sql 
} 

當被執行時從所述兩個哪個更快和更有效?

+0

試試看吧? – jordanm

+0

截至目前我不能嘗試它,因爲我目前正在一個活的數據庫,所以..一旦會有一個緩慢的查詢,將影響目前正在進行的調用。所以我必須在執行之前決定哪一個更好。 – Kiel

+4

將其中一個備份轉儲恢復到您應該擁有的測試環境。 – jordanm

回答

5

情況1會更快。

它不僅執行查詢的時間來確定總時間量。 解析,準備計劃也需要時間。在情況2中需要多次進行,情況1只有一次。刪除一行將會同樣快,但是這會增加案例1的查詢開銷。

+1

解析和準備參數將通過使用準備好的查詢用於循環選項中的重複查詢來緩解。但即使如此,我仍然會說'in(..)'選項更好。 – Spudley

+0

謝謝!那麼我會堅持案例1! – Kiel

1

第一個產生更好的性能。因爲對於第二個查詢,如果記錄有1000行,那麼Web應用程序必須爲每次刪除命中1000次數據庫,並且必須爲每個事務更新事務日誌。所以說這樣說,選項1分隔更好。