我已經在數據庫中創建了一個視圖,該視圖爲我提供了一個組織結構的表示形式。的確,我在這個視圖中使用了getdate()。我已經在我的edmx中導入了視圖,並根據這個視圖編寫了查詢。大多數查詢與視圖一起加入一個表並返回一個DTO。這些查詢工作正常,並且當我在SQL事件探查器中對其進行概要分析時,速度很快(200ms)。由於查看重新計算,LinQ查詢的持續時間很長
當我在連接表和視圖上做一個組時,那麼持續時間要長得多。奇怪的是,當我執行LinQ查詢的時間非常長,但是當我在SQL Server Management Studio中自己執行生成的查詢時,它非常快。我確定這不是由已經計算的緩存或執行計劃造成的。 LinQ查詢還爲我提供了大量的讀取和寫入,而通過SQL Mgmt Studio進行的查詢不會給我寫入任何信息,而且讀取次數也會減少很多。
我們推測,當通過LinQ執行查詢時需要重新計算視圖,而不是通過SQL Mgmt Studio執行查詢時。
我試過的另一種方法是在數據庫中創建一個存儲過程。這個存儲過程執行與LinQ生成的完全相同的查詢。我已經將這個存儲過程映射到了edmx中。當我再次通過LinQ調用存儲過程時,持續時間非常長(7000毫秒),並且有很多讀寫操作。當我通過SQL Mgmt Studio執行它時,持續時間與預期的一樣(200ms),讀取次數少,沒有寫入。
有什麼建議嗎? 謝謝
你將不得不提供更多的信息給任何人說這個。例如:視圖是怎樣的?你的LINQ查詢是怎樣的? SQL的執行過程如何? – Steven 2010-09-22 10:12:50