2013-05-03 98 views
1

我很好奇,有什麼更好的性能。關於上下文的一點點:我正在處理需要輸入到數據庫表中的CSV文件,並且需要確保我嗅出重複項。所以爲了實現這一點。有兩種策略:多行SQL查詢檢查1行vs 1單行查詢檢查多行

a。檢查每一行是否對應數據庫,如果其中一列是重複的
b。收集所有行,然後檢查是否有任何這些行是重複的

本質上爲a。

SELECT count(*) FROM table WHERE UniqueColumn = $uniqueColumnFromCSV 

和B:

SELECT UniqueColumn FROM table 
WHERE UniqueColumn in ($uniqueColumn1FromCSV,$uniq....,$uniqueColumn2FromCSV); 

上面會給我存在於db表,我可以用我的$csvLines[]過濾掉郵件郵件的數組。

我贊成b,因爲它會進行1個DB調用,並且不會通過處理每行來停止CSV文件讀取機制。然後再次,因爲第二次調用是檢查整個數據庫表中是否存在多條記錄,所以我不太相信。

爲了討論,我們可以忽略CSV部分。我真正感興趣的是知道向數據庫發出1000個調用的性能,以檢查是否存在uniqueColumn值,並向數據庫發出1次調用以檢查哪個uniqueColumns是重複的

回答

1

我贊成B的,因爲它使1 DB調用

你的直覺是正確的。

然後,由於第二次調用是檢查整個數據庫表是否存在多個記錄,所以我不太確信。

這兩種方法都在搜索完全相同的行,所以在這裏沒有任何區別。不同之處在於,對於第一種方法,數據庫往返行程的價格將每行支付一次,而對於第二種方法,無論行數如何,都只支付一次。

我真的很感興趣知道的是,對數據庫進行1000次調用以檢查是否存在uniqueColumn值與調用數據庫以檢查哪個uniqueColumns是重複項的性能。

我建議你測量精確的結果,但我認爲1「大」的查詢將比1000個「小」查詢快得多。


其實有可能,有利於大的查詢,如果你的DBMS可以並行查詢執行。

1

RDBMS針對集合操作進行了優化,因此,恕我直言,一次呼叫處理整個數據集比撥打1000次呼叫總是更好(更快)。