[SQL SERVER][Performance]NOEXPAND Hint

[SQL SERVER][Performance]NOEXPAND Hint

很久以前我針對Indexed View寫過兩篇文章

大部分的情況下,透過Indexed View都能大幅度改善查詢效能,

但昨天朋友詢問為什麼查詢陳述式有包含View Name,

可是查詢計畫卻沒有使用 Indexed View,該如何強制使用Index View呢?

其實這問題不難處理,但使用前提是你很確定使用Index View效能有所改善,

不然建議還是讓SQL Server的查詢優化工具自行判斷處理,

下面我簡單還原這問題。

 

NOEXPAND Hint和 EXPAND VIEWS 選項 說明(取自BOL)

image

 

建立 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

 

 

image

雖然查詢中包含 myview 名稱,但執行計畫卻沒有使用Indexed View。

 

 

 

使用 noexpand Hint 強制執行計畫使用Indexed View

select name  
from myview with(noexpand)
where productid >500

 

image

 

 

參考

檢視解析

解析檢視上的索引

Improving Performance with SQL Server 2008 Indexed Views