[SQL SERVER][Performance]NOEXPAND Hint
很久以前我針對Indexed View寫過兩篇文章,
大部分的情況下,透過Indexed View都能大幅度改善查詢效能,
但昨天朋友詢問為什麼查詢陳述式有包含View Name,
可是查詢計畫卻沒有使用 Indexed View,該如何強制使用Index View呢?
其實這問題不難處理,但使用前提是你很確定使用Index View效能有所改善,
不然建議還是讓SQL Server的查詢優化工具自行判斷處理,
下面我簡單還原這問題。
NOEXPAND Hint和 EXPAND VIEWS 選項 說明(取自BOL)
建立 Indexed View
create view myview WITH SCHEMABINDING AS
select productid,name,productnumber,listprice,sellstartdate
from production.Product
where productid >300
create unique clustered index idx_myview on myview(productid)
查詢陳述式
select name
from myview
where productid >500
雖然查詢中包含 myview 名稱,但執行計畫卻沒有使用Indexed View。
使用 noexpand Hint 強制執行計畫使用Indexed View
select name
from myview with(noexpand)
where productid >500
參考