檢視表定義 不得包含 以下構造:
TOP, DISTINCT, UNION, OUTER JOIN, SELF JOIN, SUBQUERY, DERIVED TABLEAVG, STDEV, VAR, COUNT(*) (需用 COUNT_BIG(*))CONVERT 產生非精確結果、浮點數運算COMPUTE, ORDER BY (除非搭配 TOP,但 TOP 也被禁止)CONTAINS, FREETEXT)、OPENROWSET, OPENQUERY, OPENDATASOURCE, OPENXMLtext/ntext/image/filestream/xml 欄位、TABLE HINT (如 NOLOCK)SUMCOUNT_BIG(*)。HAVING, CUBE, ROLLUP, GROUPING()。註:查詢優化器在符合條件時仍可使用索引檢視表,即使查詢本身不符合上述限制。
GROUP BY 列。IGNORE_DUP_KEY。SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET CONCAT_NULL_YIELDS_NULL ON
SET NUMERIC_ROUNDABORT OFF
SET QUOTED_IDENTIFIER ON
-- 基表: SalesOrderDetail (OrderID, ProductID, Qty, UnitPrice)
CREATE VIEW dbo.SalesSummary
WITH SCHEMABINDING
AS
SELECT ProductID,
COUNT_BIG(*) AS Cnt,
SUM(Qty) AS TotalQty,
SUM(Qty * UnitPrice) AS TotalAmount
FROM dbo.SalesOrderDetail
GROUP BY ProductID
GO
-- 建立唯一叢集索引
CREATE UNIQUE CLUSTERED INDEX IX_SalesSummary_ProductID
ON dbo.SalesSummary (ProductID)
GO
-- 查詢自動使用索引檢視表 (即使未直接查詢 View)
SELECT ProductID, SUM(Qty) FROM SalesOrderDetail GROUP BY ProductID
-- 優化器將改用 IX_SalesSummary_ProductID 掃描,避免掃描大表