索引访问方法及索引优化.docxVIP

  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文档。上传文档
查看更多
索引访问方法及索引优化

要了解索引访问方法,首先要知道索引的结构。1.表和索引的结构?页页是sql server存储数据的基本单位,大小为8kb,可以存储表数据、索引数据、执行计划数据、分配位图、可用空间信息。页是sql server可以读写的最小I/O单位。即便是读取一行数据,它也要把整个页加载到缓存并从缓存中读取数据。区区是由8个连续页组成的分配单元。堆堆是指不含聚集索引的表,它的数据不按任何顺序进行存储。联系一个堆中的数据的唯一结构是被称为索引分配映射(IAM)的一个位图页,当扫描对象时,SQl server使用IAM页来遍历该对象的数据。聚集索引:它的叶级表中维护所有数据,按照索引键列的顺序存储在索引的叶级。在索引页级别的上层,索引还维护着其他级别,每个级别都概况了它下面的级别,非叶级索引上的每一行指向它下一级别的整个页。堆上的非聚集索引:与聚集索引的唯一区别是非聚集索引的叶级页只包含索引键列和指向特定数据行的行定位符,称为RID。当通过索引查找到特定的数据行后,Sqlserver必须在seek操作之后执行RID lookup操作,该操作用于读取包含数据行的页。聚集表上的非聚集索引:指向特定数据行的行定位符是聚集键的值,不是RID。?2.索引访问方法?表扫描/无序聚集索引扫描当表中没有索引时,连续的扫描表中的所有数据页。SQl server将根据该表的IAM页指示磁盘取数臂按物理顺序扫描属于该表的区。当表包含聚集索引时,所采取的方法将是无序聚集索引扫描。示例sql:select orderid,custid,empid,shipperid,orderdate,filler from dbo.Orders索引:CREATE CLUSTERED INDEX idx_cl_od ON dbo.Orders(orderdate);表Orders结构: orderid,custid,empid,shipperid,orderdate,filler覆盖非聚集索引扫描Sql server 只访问索引数据就可以找到满足查询所需的全部数据,不需要访问完整的数据行。示例sql:select orderid from dbo.Orders索引:ALTER TABLE [dbo].[Orders] ADD? CONSTRAINT [PK_Orders] PRIMARY KEY NONCLUSTERED( [orderid] ASC)有序聚集索引扫描按照链接列表对聚集索引叶级执行的完整扫描 操作。示例sql:select orderid,custid,empid,shipperid,orderdate,filler from dbo.Orders order by orderdate索引:CREATE CLUSTERED INDEX idx_cl_od ON dbo.Orders(orderdate);不同于无序索引扫描,有序扫描的性能取决于索引的碎片级别。有序覆盖非聚集索引扫描与有序聚集索引扫描类似,但是覆盖非聚集索引扫描时,因为它涉及更少的页,它的成本肯定比聚集索引索引扫描要低。示例sql:select orderid, orderdate from dbo.Orders order by orderid?非聚集索引索引查找+有序局部扫描+lookups通常用于小范围查询,且用到的非聚集索引没有覆盖该查询。示例sql:select orderid,custid,empid,shipperid,orderdate,filler from dbo.Orders where orderid between 101 and 200?无序非聚集索引扫描 + lookups通常符合以下情况时,优化器会选择此种访问方法:该查询的选择性足够高最适合某查询的索引并不覆盖该查询索引没有按顺序维护被查找键示例sql:select orderid,custid,empid,shipperid,orderdate,filler from dbo.Orders where custid = ‘’?聚集索引查找+有序局部扫描对于按聚集索引的第一个键列进行筛选的范围查询,优化器通常使用这种方法。示例sql:select orderid,custid,empid,shipperid,orderdate,filler from dbo.Orders where orderdate = 这种方法的好处是不涉及lookups.?覆盖非聚集索引查找+有序局部扫描访问方法与上一个类似,唯一的区别是非聚集索引。相对于上一个访问方法,这个方法的好处在于非聚集索引的的叶级页比聚集索引的叶级页能够容纳更多的行。示例sql: select shipperid,orderdate, custid f

文档评论(0)

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

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

1亿VIP精品文档

相关文档