Sql-Server

視圖是否利用表索引

  • November 12, 2014

我有一個帶有聚集索引和 2 個非聚集索引的表。現在,在我看來,我正在從我的桌子上選擇所有東西

create view dbo.MyView
as 
Select * from MyTable

現在,當我在查詢中使用此視圖時,我可以假設此視圖將利用在表上創建的索引。(即以與Select * from MyTable相同的方式工作)?還是我必須使用索引視圖

除了問題

如果視圖可以利用表索引,那麼使用SELECT * FROM MyView Where SomeColumn = @someValue可能會嚴重影響性能(如果視圖有大量數據,那麼在沒有索引時它會表現得像一個堆)。如何克服這個問題?除了使用 NOEXPAND(因為我使用的是企業版)

視圖只是一個“已保存的查詢”。每當您訪問視圖時,仍會使用基表上的索引。

您不需要使用索引視圖,除非視圖包含您不想在每次查詢視圖時執行的昂貴邏輯(聚合或連接)。請注意,即使視圖被“物化”,優化器也可以自由地直接訪問基表及其索引,而完全忽略視圖上的索引。

另請注意,使視圖上的索引與基表中的數據保持一致是昂貴的:每次寫入其中一個基表時,您還必須更新視圖上的索引。

引用自:https://dba.stackexchange.com/questions/82480