索引视图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 

 

posted @ 2019-04-19 17:56  jasonlai2016  阅读(94)  评论(0编辑  收藏  举报