SQL Server性能优化(10)非聚集索引的存储结构
2015-05-24 22:04
337 查看
一,新建测试表
删除默认聚集索引,新建一个在name列上非聚集索引
插入500条数据
查看该表的页的信息
二、查看非聚集索引的根页面
1. 索引根页面有五个子页面,为201~206。根据上一个图,这5个子页面Type都是2,也是索引页面,即B+树的中间节点(而不是页节点)的页面。
2. 这五个子页面,每个页包含80行数据(258-179=79,337-258=179),并且是对Name列进行划分,因为该表现在只有一个索引是Name列。
3. 倒数第二列是行定位指针,包括三部分:文件标识符(ID)+页码+页上的行数。
如何进行分析?参考文档里说:
举例第二行0x 4F000000 0100 1200除去开头的16进制标示,剩下总共8个字节,从右往左行号2个字节,文件ID2个字节,最左侧的4个字节就是页号了,所以
行号(0012)=18
文件页(0001 )=1
页号(0000004F)=59页
总结下就是,202页是非聚集索引的根页,它第二行是“张三179”,这一行指向是一个子索引页(页号201)。这个子索引页内共有80行,每一行指向1条数据。并且这80条数据的第一条的位置在1号文件里59页的18行。
二、查看非聚集索引的子索引页面
看下按照非聚集索引的查询计划
总结下,非聚集索引的查询过程 (如Name = ‘张三180’)
1. 首先查找根索引页,根索引页会找自己所有的子索引,看看那个子索引包含“张三180”。这是第一次读取物理页。
2. 找到这个子索引页,在子索引页的页内,找到“张三180”所在的行。然后看到其RID的信息。这是第二次读取物理页。
3. 从硬盘读取这个页,这是第三次读取物理页。
参考
/article/4581738.html
CREATE TABLE [dbo].[Users]( [ID] [int] IDENTITY(1,1) NOT NULL, [NAME] [char](80) NOT NULL, [CreatTime] [datetime] NOT NULL ) ON [PRIMARY]
删除默认聚集索引,新建一个在name列上非聚集索引
插入500条数据
查看该表的页的信息
---开启跟踪标志 DBCC TRACEON(3604,2588) --DBCC TRACEOFF(3604,2588) ---获取对象的数据页,结构:数据库、对象、显示 DBCC IND(Ixtest,users,-1)
二、查看非聚集索引的根页面
DBCC page(IxTest,1,202,3)
1. 索引根页面有五个子页面,为201~206。根据上一个图,这5个子页面Type都是2,也是索引页面,即B+树的中间节点(而不是页节点)的页面。
2. 这五个子页面,每个页包含80行数据(258-179=79,337-258=179),并且是对Name列进行划分,因为该表现在只有一个索引是Name列。
3. 倒数第二列是行定位指针,包括三部分:文件标识符(ID)+页码+页上的行数。
如何进行分析?参考文档里说:
举例第二行0x 4F000000 0100 1200除去开头的16进制标示,剩下总共8个字节,从右往左行号2个字节,文件ID2个字节,最左侧的4个字节就是页号了,所以
行号(0012)=18
文件页(0001 )=1
页号(0000004F)=59页
总结下就是,202页是非聚集索引的根页,它第二行是“张三179”,这一行指向是一个子索引页(页号201)。这个子索引页内共有80行,每一行指向1条数据。并且这80条数据的第一条的位置在1号文件里59页的18行。
二、查看非聚集索引的子索引页面
DBCC page(IxTest,1,201,3)
看下按照非聚集索引的查询计划
SET STATISTICS IO ON SELECT * FROM Users WHERE NAME = '张三180'
总结下,非聚集索引的查询过程 (如Name = ‘张三180’)
1. 首先查找根索引页,根索引页会找自己所有的子索引,看看那个子索引包含“张三180”。这是第一次读取物理页。
2. 找到这个子索引页,在子索引页的页内,找到“张三180”所在的行。然后看到其RID的信息。这是第二次读取物理页。
3. 从硬盘读取这个页,这是第三次读取物理页。
参考
/article/4581738.html
相关文章推荐
- 【转】由浅入深探究mysql索引结构原理、性能分析与优化
- SQL Server 表和索引存储结构
- SQL Server 查询优化 索引的结构与分类
- 由浅入深探究mysql索引结构原理、性能分析与优化
- SQL Server 查询性能优化——索引与SARG(四)
- SQL Server 查询性能优化——创建索引原则(二)
- Sql Server查询性能优化之创建合理的索引(下篇)[转]
- 10步骤优化SQL Server 数据库性能
- Sql Server查询性能优化之创建合理的索引(上篇)
- 由浅入深探究mysql索引结构原理、性能分析与优化
- 由浅入深探究mysql索引结构原理、性能分析与优化
- SQL Server 性能优化之——重复索引
- SQL Server 查询性能优化——创建索引原则(一)
- 由浅入深探究mysql索引结构原理、性能分析与优化
- Sql Server查询性能优化之走出索引的误区
- SQL SERVER大话存储结构(4)_复合索引与包含索引
- SQL Server 2016 查询存储性能优化小结
- SQL Server 查询性能优化——创建索引原则(一)
- 由浅入深探究mysql索引结构原理、性能分析与优化
- Sql Server中的表组织和索引组织(聚集索引结构,非聚集索引结构,堆结构)