2015-06-23 56 views
-3

我有一個查詢從一個已經很大(> 10.000.000行)的視圖中提取數據。我知道,愚蠢的做,但堅定我的決定。Where子句的不同值會降低查詢的速度

查詢已經很慢了。但是,如果我更改Where標準的值,查詢運行時間很長,或者似乎永遠不會完成。有沒有人解釋這個問題?對我來說,似乎sql服務器已經優化了這個標準參數的查詢,其他的需要永遠。

+2

您能否給我們提供一個視圖中的數據樣本,您的查詢代碼(使用不變的where子句)和您的代碼(使用更改的where子句)。如果我們不知道你的問題的細節,很難幫助你。 –

+3

聽起來像索引不好或參數嗅探不好。沒有任何細節,但它是一個垃圾射擊實際問題是什麼。 –

+1

根據您的硬件(裸機或虛擬化),10M行視圖不應該太慢。我們有一個包含三個表的索引,它有大約20億行。通過適當的索引,你的查詢不應該很慢。 –

回答

4

是的,這是很正常的。不同的查詢具有不同的最佳計劃,如果您正確傳遞參數,則對所有不同的參數使用相同的執行計劃。

除了數據庫的重新設計,你可以嘗試使用option(recompile)。請注意,這有它自己的問題 - 如增加內存消耗,延遲...

試試看看爲什麼問題在那裏 - 看兩個查詢的實際執行計劃通常是一個好主意。