$SQLServer传统索引结构.ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
$SQLServer传统索引结构剖析

SQL Server传统索引结构 不包括空间索引,XML索引,全文索引,列存储索引 林勇桦 数据文件都可以除尽8KB 索引页面和数据页面会有objectid 两种表页面组织结构 聚集索引和非聚集索引都是B+树结构 堆表 498页面 分配扫描 VS 范围扫描 分配扫描 堆表+非聚集索引 研究使用的命令:DBCC IND(库名,表名,格式) DBCC PAGE(库名,文件编号,页号,格式) 其他研究工具: winhex 从DBCC IND命令可以看到非聚集索引有两层(index level) 并且它会读取每个页面的页头 m_prevPage = (1:254) m_nextPage = (1:304) 双向链表:order by root root page DBCC PAGE([pratice],1,164,3) child child page DBCC PAGE([pratice],1,250,3) 什么是HEAP RID(KEY) FileID:PageID:SlotNumber HEAP RID(KEY)有啥用? RID查找(RID lookup) KeyHashValue有啥用? 类似于下面C#线程同步代码 include()包含性列索引 msdn:可以将非键列包含在非聚集索引中,以避免超过当前索引大小的限制(最大键列数为16,最大索引键大小为900字节),数据库引擎计算索引键列数或索引键大小时候,不考虑非键列 前转指针 1、update in place 2、non update in place 前转指针的存在导致消耗更多IO 查看前转指针记录数 SELECT * FROM sys.[dm_db_index_physical_stats](db_id(),OBJECT_ID(Department8),NULL,NULL,NULL) 后转指针 记录归位 1、收缩数据文件 2、alter table xx rebuild 非聚集索引的查找和扫描过程 堆表+非聚集索引执行计划 SELECT [GroupName] FROM [dbo].[Department8] WHERE name= 销售部22 --索引查找 SELECT [GroupName] FROM [dbo].[Department8] WHERE [GroupName]=销售组10 --索引扫描 SELECT [GroupName] FROM [dbo].[Department8] WHERE [DepartmentID]=66 --全表扫描 只扫堆 SELECT [DepartmentID],[ModifiedDate] FROM [dbo].[Department8] WHERE name= 销售部8 --索引查找 RID查找 SELECT * FROM [dbo].[Department8] WHERE [GroupName]=销售组10 --索引扫描 RID查找 几个未解决的问题 聚集索引表+非聚集索引 研究使用的命令:DBCC IND(库名,表名,格式) DBCC PAGE(库名,文件编号,页号,格式) IndexID为 1 的都是聚集索引页面 PageType 分页类型: 1:数据页面;2:索引页面;10:IAM页面 IndexID 索引ID: 0 代表堆, 1 代表聚集索引, 2-999 代表非聚集索引 root root page DBCC PAGE([pratice],1,489,3) child child page DBCC PAGE([pratice],1,491,3) 建立非聚集索引 CREATE NONCLUSTERED INDEX NCL_GroupName ON [dbo].[Department7](GroupName) root root page DBCC PAGE([pratice],1,1264,3) 什么是UNIQUIFIER(KEY) 用以保证聚集索引键唯一 聚集索引表+非聚集索引执行计划 SELECT * FROM [dbo].[Department7] WHERE [DepartmentID]=66 --聚集索引查找 SELECT [GroupName] FROM [dbo].[Department7] WHERE [Group

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档