索引视图DEMO2
use tempdb ----在创建视图和所有底层表时,必须打开ANSI_NULLS以及QUOTED_IDENTIFIER选项 --SET ANSI_NULLS ON --GO --SET QUOTED_IDENTIFIER ON --GO ----创建两张表,一张表头,一张明细,仅仅作为DEMO使用 --CREATE TABLE HeadTable --( -- HeadId INT PRIMARY KEY , -- HeadInfo VARCHAR(50) , -- DataStatus TINYINT , -- CreateDate Datetime --) --GO --CREATE TABLE DetailTable --( -- DetailId INT identity(1,1) PRIMARY KEY , -- HeadId INT , -- DatailInfo VARCHAR(50) --) --GO ----写入数据 --DECLARE @i int = 0 --WHILE @i<200000 --BEGIN -- INSERT INTO HeadTable values (@i,NEWID(),RAND()*10,GETDATE()-RAND()*100) -- INSERT INTO DetailTable(HeadId,DatailInfo) VALUES (@i,NEWID()) -- SET @i=@i+1 --END --GO ------索引视图创建 CREATE VIEW HDTable_vw WITH SCHEMABINDING AS SELECT H.HeadId,H.CreateDate,H.DataStatus,D.DetailId,D.DatailInfo FROM dbo.HeadTable H INNER JOIN dbo.DetailTable D ON H.HeadId = D.HeadId WHERE H.DataStatus > 0 GO ------为视图创建索引 CREATE UNIQUE CLUSTERED INDEX IX_HDId ON HDTable_vw(DetailId,HeadId) ---测试 --原表查询 --SET STATISTICS TIME ON --开启统计时间 SELECT H.HeadId,H.CreateDate,H.DataStatus,D.DetailId,D.DatailInfo FROM dbo.HeadTable H INNER JOIN dbo.DetailTable D ON H.HeadId = D.HeadId WHERE H.DataStatus > 0 --索引视图查询 --SET STATISTICS TIME ON --开启统计时间 SELECT HeadId,CreateDate,DataStatus,DetailId,DatailInfo FROM HDTable_vw WHERE DataStatus > 0