2016-01-02 137 views
-3

我有一個名爲ItemId的屬性,可能有1000個對象的數組。 ItemId引用表主鍵。通過主鍵值數組搜索

如何通過主鍵獲得選擇1000行的最佳性能?什麼是最佳做法?

  • 在C#循環中循環1000次,即1000次往數據庫往返循環?
  • 一個包含1000個項目的列表中的sql?
  • 使用EF並將對象數組與表連接起來。

有沒有更好的辦法?

+0

您應該測試一下選項,但我會假定表值參數是最好的。 –

+0

表值參數似乎是我實現中的最佳選項。然後我將限制往返數據庫的數量。謝謝! – Mike

回答

0

通常通過限制查詢次數來達到最佳性能。但是,使用WHERE ... IN的速度也會很慢,因爲在循環訪問的每一行中都會執行IN子句中的子查詢。這取決於你的數據庫引擎。

您可以(也應該總是)通過嘗試所有三種方法來測試性能。只有當你比較特定系統的性能時,你纔會知道。要了解性能爲何如此高,可以在查詢前使用EXPLAIN,以查看發生了什麼。

在您的具體情況中,您可能會發現(使用性能測試)添加一個包含陣列的臨時表,然後加入可能具有最佳的低級性能。使用實體框架應該具有可比性,但這取決於實施。