SQLServer查询优化 1 _索引的结构与分类

SQLServer查询优化 1 _索引的结构与分类

ID:40574025

大小:118.50 KB

页数:4页

时间:2019-08-04

SQLServer查询优化 1 _索引的结构与分类_第1页
SQLServer查询优化 1 _索引的结构与分类_第2页
SQLServer查询优化 1 _索引的结构与分类_第3页
SQLServer查询优化 1 _索引的结构与分类_第4页
资源描述:

《SQLServer查询优化 1 _索引的结构与分类》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、索引的结构关系型数据库中以二维表来表达关系模型,表中的数据以页的形式存储在磁盘上,在SQLSERVER中,数据页是磁盘上8k的连续空间,那么,一个表的所有数据页在磁盘上是如何组织的呢?分两种情况:一是数据页间无序、随机地存储在磁盘上,这样的表叫做堆表;二是数据页间按某个表字段的值有序地存储在磁盘上,这样的表做索引组织表。索引是什么?从物理结构上可分为两种:聚集索引和非聚集索引。将表中的数据有序地组织起来的索引称为聚集索引,一个表只有一个聚集索引,表上其他的索引都是非聚集索引。1.1、聚集索引结构(1)聚集索引

2、将表内的数据进行有序的组织,并不是指磁盘上数据页内数据的物理顺序,也不是指数据页在磁盘上的物理顺序,而是数据页间逻辑上以树型结构链接起来;createtablet(IDint,NAMEvarchar(100)AGEint,)GOINSERTINTOtVALUES(1,'张一',20)INSERTINTOtVALUES(2,'张二',25)INSERTINTOtVALUES(4,'张三',21)INSERTINTOtVALUES(5,'李二',23)INSERTINTOtVALUES(7,'李三',24)INSER

3、TINTOtVALUES(8,'李四',22)GOcreateCLUSTEREDindexIX_t_IDont(ID)(2)聚集索引的非叶子节点(即索引节点)行中,只包含下一节点的第一个键值及指向下一节点的指针,指针的格式为:文件编号+页编号,长度为2Byte+4Byte=6Byte;(3)聚集索引的叶子节点行就是表中的数据行;(4)没有聚集索引的表,结构如下:堆表中的数据页没有经过组织,随机的存放在磁盘上,通过IAM页进行管理,可以知道哪些数据页属于某个表以及数据页的分配情况,对于数据页的结构及数据库引擎对其管

4、理,这里不多作介绍,详见《SQLServer存储引擎》系列。(5)数据库引擎根据系统目录判断当前表是否为索引组织表,以选择索引组织表的root_page或堆表的first_IAM_page及first_page,即可对表进行扫描;(6)索引组织表和堆表包含的数据行是一样的,只是组织形式不同而已;1.2、非聚集索引结构(1)非聚集索引是对聚集索引的索引;(2)非聚集索引的索引节点行和聚集索引一样,只包含下一节点的第一个键值及指向下一节点的指针,指针的格式为:文件编号+页编号,长度为2Byte+4Byte=6Byte

5、;(3)非聚集索引的叶子节点行存储的是索引列和书签。如果是索引组织表,书签为聚集索引键;如果是堆表,书签为ROWID,长度为8Byte,即数据页号(4Byte)+文件号(2Byte)+槽号(2Byte)的行定位串;createNONCLUSTEREDindexIX_t_AGEont(AGE)GOSELECT*FROMtWHEREAGE=20此时想要根据年龄20来查找数据。如果是索引组织表,先根据AGE上的非聚集索引找到ID,此时ID值为1,然后再将ID=1带入聚集索引进行等值查找,最终在聚集索引的叶子节点得到该行

6、的所有数据;如果是堆表,先根据AGE找的应该是ID=1这一行数据的8字节的ROWID,然后再根据这个ROWID去找到该行的所有数据,即(1,'张一',20);(4)无论是聚集索引还是非聚集索引的叶子节点上都有一个指向上下页的指针。二、索引分类1、SQLSERVER中索引分类(1)B+树索引目前关系型数据库中一种常见的索引组织结构。B+树,它是一多叉平衡排序树,直到叶子节点才会命中数据,以下简称B树,可参见相关《数据结构》的书籍;(2)、全文索引目前关系型数据库一种基于标记的索引组织结构,它不是B树结构,而是基于要

7、索引的文本中的各个标记来创建倒排、堆积且压缩的索引结构。(3)、XML索引随着XML文本的应用,在各个关系型数据库中也相继提供了对这种数据结构的支持。XML实例作为二进制大型对象(BLOB)存储在xml类型列中。对于列中的每个XML对象,索引将创建几个数据行。该索引中的行数大约等于XML对象中的节点数。1.2、B树索引的分类1.2.1、物理结构分类(1)聚集索引根据索引列值,按B树结构对表内数据进行组织;(2)非聚集索引对聚集索引的索引;1.2.2、列值唯一性分类(1)唯一索引表中索引列的值唯一。SQLSERVE

8、R在唯一性上认为NULL是相等的(ORACLE中唯一键是可以插入多个NULL值的),即唯一键中只允许出现一个NULL值,但在比较运算中认为NULL是不相等的,这点要注意;(2)非唯一索引表中索引列的值不唯一;1.2.3、列个数分类(1)复合索引包含多个列的索引;(2)单列索引只包含一个列的索引。1.2.4、特殊索引(1)计算列索引计算列上的索引;(2)视图索引对视图建立索

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。