Microsoft SQL Server 自早期版本以來便支援建立虛擬資料表(檢視表),主要用於兩大目的:提供安全機制限制使用者存取基底資料表的特定子集,以及讓開發人員自訂使用者邏輯檢視儲存資料的方式。
SQL Server 2000 大幅擴充檢視表功能,引入索引檢視表機制。當在檢視表上建立唯一叢集索引時,該檢視表即成為索引檢視表,其結果集會立即實體化並持久儲存在資料庫實體儲存空間中,避免每次查詢都重複計算聯結與彙總,從而大幅改善複雜查詢的資料存取效能。
從 DBMS 觀點看,檢視表是中繼資料的描述。傳統檢視表在查詢執行時才即時實體化,聯結與彙總等運算會在每次參考該檢視表的查詢中重複進行。建立唯一叢集索引後,檢視表結果集預先計算並持久化儲存,查詢優化器可直接使用這些預計算結果。
查詢使用索引檢視表有兩種方式:
索引檢視表超越傳統索引,在三大面向提升查詢效能:
圖 1. 查詢優化器使用索引檢視表時一般能提升多少效能(含百萬列大資料表實測)
除了叢集索引,檢視表上也可建立非叢集輔助索引。當查詢涉及叢集索引未涵蓋的欄位時,優化器可選擇輔助索引避免全表掃描。但索引需要持續維護,會增加資料庫額外負擔,必須在索引效益與維護成本間尋找平衡點。