我有一個向上3,000個十進制值的列表,每個我需要從SQL Server數據庫中查找另一個十進制值。目前我正在使用.Net SqlClient
類。
製作3,000個查詢似乎效率不高,但我不確定是否有一種將查詢合併到少數幾個調用中的高效方法。優化大量的查詢
查找表目前包含150萬左右的價值觀和我不希望從除數據庫實際需要進行查找(所以我不能在內存中緩存等整個表)檢索任何值。
什麼是這樣做的最佳方式?
我有一個向上3,000個十進制值的列表,每個我需要從SQL Server數據庫中查找另一個十進制值。目前我正在使用.Net SqlClient
類。
製作3,000個查詢似乎效率不高,但我不確定是否有一種將查詢合併到少數幾個調用中的高效方法。優化大量的查詢
查找表目前包含150萬左右的價值觀和我不希望從除數據庫實際需要進行查找(所以我不能在內存中緩存等整個表)檢索任何值。
什麼是這樣做的最佳方式?
如果您使用SQL Server 2008中,你可以通過在表值參數到您的查詢 - 通過在值的表,然後以在查詢中加入上。與替代方法進行性能比較的示例(CSV & XML):http://www.adathedev.co.uk/2010/02/sql-server-2008-table-valued-parameters.html
我會看到如何執行並從那裏執行。
如果你不使用SQL Server 2008,你可以嘗試在那篇文章中比較的另一種方法(XML和CSV) - 在StackOverflow上有很多關於「如何將多個值傳遞給存儲過程」的討論。或者,將十進制值批量加載到臨時表中,然後加入。
SQL Server 2008中引入table value parameters。您可以將它們作爲用戶類型參數define,並將它們傳遞給存儲過程和UDF(UDF需要只讀)。
你可以寫一個存儲過程,需要小數的表,不查找並返回你所需要的數據,都在一個查詢。
如果值不經常改變,使的AppFabric分佈式緩存bevore它。 這將是加速它的最佳方式。在我看來,將邏輯轉移到存儲過程通常不是可伸縮性的最佳方式。
謝謝你,非常翔實的答案。 – 2010-07-22 08:25:00