2012-01-06 147 views
0

我已經通過一個相當簡單的EF 4.1代碼優先模型創建了一個WCF數據服務。對於每個請求,我必須提供一個維護數據以維護我的多租戶分區中的數據分隔。我看到可怕的表現,並在運行sql服務器跟蹤後,我看到所有的參數化查詢都像使用子查詢那樣。EF代碼優先的子查詢4.1

select top 100 <This is because of paging> 
colA, 
colB, 
colC 
from (select colA, colB, colC 
     from table 
     where clientid = 12345) 
orderby ..... 

有什麼辦法來調整這個,以便它跳過select的子查詢嗎?這看起來荒謬不必要,並以驚人的數量級降低了性能。

謝謝。

+0

可能需要索引?嘗試在SSMS中運行相同的查詢,看看它是否推薦任何索引。 – 2012-01-06 15:26:01

+0

小心發佈相關的LINQ查詢? – 2012-01-06 15:26:31

回答

1

有什麼辦法來調整這個,以便它跳過select的子查詢嗎?

否,除非您要爲MSSQL Server(或您正在使用的其他數據庫)重寫整個EF提供程序。

這看起來很荒謬不必要,並且將性能降低了一個驚人的數量級。

您是否確實調查過性能問題的來源?您顯示的查詢應該通過DB服務器上的查詢優化器進行優化,並且不應該對性能產生重大影響。

確保您已正確配置索引和最新數據統計信息。

+0

謝謝,那就是我所害怕的。我毫不懷疑索引可能存在問題。然而,我反對的桌子目前在3.5tb附近,每個人都不敢碰它。不過,我會研究影響。 – RockyMountainHigh 2012-01-06 17:03:27