《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(8)
《Microsoft Sql server 2008 Internals》读书笔记订阅地址:
http://www.iyunv.com/downmoon/category/230397.html/rss
《Microsoft Sql server 2008 Internals》索引目录:
《Microsoft Sql server 2008 Internal》读书笔记--目录索引
本文继续了解索引视图(Indexes View)
关于索引视图的基本概念,可以在MSDN了解:http://msdn.microsoft.com/zh-cn/library/ms188783.aspx
注意:虽然索引视图是在SQL Server 2000中已经加入,但只有SQL Serer 2008的企业版才支持索引视图的匹配。
我们看一个例子:
Create table Table1(id int primary key ,submitdate datetime,commment nvarchar(200));
Create table Table2(id int primary key identity,commentid int ,product nvarchar(200));
insert into Table1(id,submitdate,commment) values(1,'2008-01-09','downmoon index view')
insert into Table2
select 1,'SQL Server 2008 r2'
Create view dbo.v1 with schemabinding
as
select t1.id,t1.submitdate,t1.commment,t2.product from dbo.Table1 t1
inner join dbo.Table2 t2 on t1.id=t2.commentid
go
Create unique clustered index idx1on v1(id); 对于以下三种查询:
http://anp73g.blu.livefilestore.com/y1pjIP7JnZ8dz4Mmvkik1tD4d7AsknVnY1XJ2m1_ILgXfvHdk-MZeT-6GmB1zd8_DZ40AmLZPN5fcIYm2XwnfMorNRRDo8gX6r9/2010-06-22%2023-41-33.png?psid=1
http://anp73g.blu.livefilestore.com/y1piinn9haePwR5w_Zhi3TgE_d-pvDAnb7Q1XuuNyTdO6BaNs9F7F-b_fMr1Kr3KJh3F9OdpHDiR-ws5ROUomv9K8YHEZBhNotG/2010-06-22%2023-43-38.png?psid=1
http://anp73g.blu.livefilestore.com/y1piinn9haePwSzruFfTFchxX0h3AQBdp-iNFT8mwk0mHeKzk8NcivzKHnrl6qbLvMEsFejvAXGPLxcZVSTBPJk9WvQ-f0l85Ty/2010-06-22%2023-45-28.png?psid=1
以上三种查询的成本其实是一样的,因为在索引视图的匹配得到了相同的结果。
查询优化器并非匹配所有的视图,我们看一个不匹配的例子:
Create Table table3(col1 int primary key identity,col2 int);
Insert into table3
select 10
union all select 20
union all select 30
Create view dbo.v2 with schemabinding
as
select t3.col1,t3.col2 From dbo.table3 t3 where t3.col2>20;
go
Create unique clustered index idx2on v2(col1);
select * from dbo.v2 where col2=CONVERT(int,10); 对于不匹配的索引视图,SQL Server直接在基表而不在视图中查询。
http://anp73g.blu.livefilestore.com/y1pdJ5FmMCvUZ7ZBSfc8CZeu3ri8Ry9dqmM49i3RPv-XTvZt9YvQ95EZGS0EKI7pizwvwFA3xVrnxzk2mmXQClSZNQTj2LkSUc1/2010-06-23%2000-17-18.png?psid=1
其实这是个0行查询,因为 col2=10 and col2>20这个条件,SQL Server查询优化器根本不会执行。
SQL Server也支持匹配在某些案例下的索引视图,如列和行的子集。
Create table basetbl1(col1 int,cl2 int,col3 binary(4000));
Create unique clustered index idx3on basetbl1(col1);
set nocount on
BEGIN TransAction;
Declare @i int
set @i=0
while @i
页:
[1]