数据库之索引基础.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据库之索引基础

数据库索引的基础知识 来源: DianPing IT??发布时间: 2012-06-27 10:36??阅读: 9256 次??推荐: 18?? 原文链接?? [收藏]??   一、理解索引的结构   索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度。使用索引查找数据,无需对整表进行扫描,可以快速找到所需数据。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。   SQL Server 中数据存储的基本单位是页(Page)。数据库中的数据文件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分成页(从 0 到 n 连续编号)。磁盘 I/O 操作在页级执行。也就是说,SQL Server 每次读取或写入数据的最少数据单位是数据页。   下面我们先简单的了解一下索引的体系结构:   1. 聚集索引结构   在 SQL Server 中,索引是按 B 树结构进行组织的。   聚集索引单个分区中的结构: --建立UserAddDate聚集索引 CREATE CLUSTERED INDEX [IX_AddDate] ON [User] ( [AddDate] ASC )      聚集索引(Clustered Index)特点 聚集索引的叶节点就是实际的数据页 聚集索引中的排序顺序仅仅表示数据页链在逻辑上是有序的。而不是按照顺序物理的存储在磁盘上 行的物理位置和行在索引中的位置是相同的 每个表只能有一个聚集索引 聚集索引的平均大小大约为表大小的5%左右   2. 非聚集索引结构   非聚集索引与聚集索引具有相同的 B 树结构,它们之间的显著差别在于以下两点:   1. 基础表的数据行不按非聚集键的顺序排序和存储。   2. 非聚集索引的叶层是由索引页而不是由数据页组成。   下图示意了单个分区中的非聚集索引结构:   包含列的索引   通过将包含列(称为非键列)添加到索引的叶级,可以扩展非聚集索引的功能。键列存储在非聚集索引的所有级别,而非键列仅存储在叶级别。   下面举个简单的例子来说明一下聚集索引和非聚集索引的区别:   我们有一本汉语字典,可以把它的正文本身看做是一个聚集索引,它是按照汉字拼音的开头字母排序的,不再需要查找其他目录。当遇到不认识的字时,需要结合“部首目录”和“检字表”, 先找到目录中的结果,然后再翻到您所需要的页码。通过这种方法查到的目录中字的排序并不是真正的正文的排序方法。把这种看做是一个非聚集索引。   另外,请注意每个表只能有一个聚集索引。 --建立UserAddDate非聚集索引 CREATE NONCLUSTERED INDEX [IX_AddDate] ON [User] ( [AddDate] ASC )      非聚集索引 (Unclustered Index) 特点 非聚集索引的页,不是数据,而是指向数据页的页。 若未指定索引类型,则默认为非聚集索引。 叶节点页的次序和表的物理存储次序不同 每个表最多可以有249个非聚集索引 在非聚集索引创建之前创建聚集索引(否则会引发索引重建)   二、选择建立哪种索引   1. 何时创建聚集索引更能提高性能   Clustered Index会提高大多数table的性能,尤其是当它满足以下条件时:   独特, 狭窄, 持续增长的,最好是只向上增加。例如: Identity Date, identity GUID (only when using newsequentialid() function)     2. 非聚集索引提高性能的方法   非聚集索引由于B树的节点不是具体数据页,有时候由于这个原因,会导致非聚集索引甚至不如表遍历来的快。但是,非聚集索引有个特性,如果你要查询的内容,在非聚集索引中以及被覆盖到了,则不需要继续到聚集索引,或者RID(heap结构中的行标识符)中去寻找数据了,这时候就可以很大的提高性能,这就是覆盖面(Covering) 的问题。   由于聚集索引叶子节点就是具体数据,所以聚集索引的覆盖率是100%, 通过提高覆盖面来提高性能的问题也就只有非聚集索引(Nonclustered Indexes)才存在。   当查询中所有的columns都包括在index上时,我们说这 index covers the query. Columns的顺序在此不重要(Select 时候的顺序不重要,但是Index 建立的顺序可得小心了)。   在 SQL Server 2005 中,为了提高这种 Covering 带来的好处,甚至可以通过将非键列添加到非聚集索引的叶级别来扩

文档评论(0)

kakaxi + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档