WEB开发网
开发学院数据库MSSQL Server SQL Server 索引基础知识(6)----索引的代价,... 阅读

SQL Server 索引基础知识(6)----索引的代价,使用场景

 2008-02-19 09:53:15 来源:WEB开发网   
核心提示: 但是,非聚集索引有个特性,SQL Server 索引基础知识(6)----索引的代价,使用场景(3),如果你要查询的内容,在非聚集索引中以及被覆盖到了,但是这个非聚集索引的叶子节点上还包含 FileName 字段的信息,USE AdventureWorks;GOCREATE INDEX I

但是,非聚集索引有个特性,如果你要查询的内容,在非聚集索引中以及被覆盖到了,则不需要继续到聚集索引,或者RID中去寻找数据了,这时候就可以很大的提高性能,这就是 覆盖面(Covering) 的问题。

由于聚集索引叶子节点就是具体数据,所以 聚集索引的覆盖率是 100%,

通过提高覆盖面来提高性能的问题也就只有非聚集索引(Nonclustered Indexes)才存在。

当查询中所有的columns 都包括在index上时,我们说这个 index covers the query. Columns的顺序在此不重要

(Select 时候的顺序不重要,但是Index 建立的顺序可得小心了)。

在 SQL Server 2005 中,为了提高这种 Covering 带来的好处,甚至 可以通过将非键列添加到非聚集索引的叶级别来扩展非聚集索引的功能。

比如下面的脚本, 虽然我们是对 Title, Revision 建立的非聚集索引,但是这个非聚集索引的叶子节点上还包含 FileName 字段的信息。

USE AdventureWorks;

GO

CREATE INDEX IX_Document_Title   

ON Production.Document (Title, Revision)   

INCLUDE (FileName); 

下面的代码就是测试 Covering 的.
我已经在每个查询使用的方式,逻辑读的个数都标在每个查询前面了。
SET STATISTICS IO ON
-- Turn Graphical Showplan ON (Ctrl+K)
USE CREDIT
go
-- 逻辑读取144 次Clustered Index Scan
SELECT m.LastName, m.FirstName, m.Phone_No
FROM dbo.Member AS m WITH (INDEX (0))
WHERE m.LastName LIKE '[S-Z]%'
go
--CREATE INDEX MemberLastName ON Member(LastName)
go
-- 逻辑读取6354 次 BookMark Lookup
SELECT m.LastName, m.FirstName, m.Phone_No
FROM dbo.Member AS m WITH (INDEX (MemberLastName))
WHERE m.LastName LIKE '[S-Z]%'
go
--CREATE INDEX NCLastNameCombo ON Member(LastName, FirstName, Phone_No)
go
SELECT m.LastName, m.FirstName, m.Phone_No
FROM dbo.Member AS m
WHERE m.LastName LIKE '[S-Z]%'
go
--CREATE INDEX NCLastNameCombo2 ON Member(FirstName, LastName, Phone_No)
go
SELECT m.LastName, m.FirstName, m.Phone_No
FROM dbo.Member AS m WITH (INDEX (NCLastNameCombo2))
WHERE m.LastName LIKE '[S-Z]%'
go
-- If you want to clean up the indexes:
--DROP INDEX Member.MemberLastName
--DROP INDEX Member.NCLastNameCombo
--DROP INDEX Member.NCLastNameCombo2
参考资料

Teched 2007 上 吴家震 主讲的"微软SQL服务器Always-On Tech-nologies: 高级索引策略" 录像下载地址:

http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032364059&Culture=zh-CN

注意, 这个页面标示的是 "SharePoint 2007 网站性能调优" ,但是其实是高级索引策略,微软弄错文件了,害得我一个个下下来看,哪个是需要的录像.

上一页  1 2 3 

Tags:SQL Server 索引

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接