开发者社区> 技术小甜> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

数据库索引详解

简介:
+关注继续查看

紊乱的数据库叫做堆 
创建一个物理索引,使数据基于某一个键聚集在一起。堆和聚集索引是数据页存在的两种方式。

堆 
堆就好比没有排序过的数据页,没有索引的自然状态,每个表都是组织在堆中。当表需要更多的数据,他会让堆扩展使之再分配,增加在堆上的页数。这是非常有效的,这样,数据库可以存放数据在任何空当,而不是只能存放在指定的地方。 
表数据在堆中,没有经过排序。当你在一个堆中的表里查询数据,数据引擎必须检查堆中的每个页,以此判断是否满足查询,这个读取表的每个页面的过程叫做全表扫描。大多数表,进行全表扫描是非常耗性能的。解决的方法就是使用索引。

索引结构 
索引在sqlserver中使用平衡树(balanced tree),有时被称作B树,平衡树索引形成树结构,索引的数据在这几组页上面(叶子节点)。这种结构叫做平衡树因为每个叶子到根的距离都是一致的。 
有两种相关的索引使用了平衡树结构。第一种叫做聚集索引。这种索引呈现了数据表中数据的物理排序次序,每个表只能有一个聚集索引,第二种叫做非聚集索引,这种索引在每个页上构建了一个排序关键字,所以他不是直接影响到数据页的组织方式。因为这个,你可以在表上有多个非聚集索引。

聚集索引的叶节点(最底层的节点)包含了数据页。 
非聚集索引的叶节点(最底层的节点)不包含数据页,仍然是个索引页。

看下图:聚集索引示意图。根结点和叶节点中间的索引级别统称中间级。最后的叶节点包含了数据页。

image

看下图,非聚集索引。叶节点仍然是索引页。并且非聚集索引的排序顺序和物理顺序无关。当SQLserver到达非聚集索引的底部节点后,他就开始使用聚集索引来搜寻实际的数据行。这就增加了一些IO开销,但是好处是,如果数据行被更改了,非聚集索引行定位仍然不变。

image

当在非聚集索引上搜索到最后的叶子节点后,要找的数据页,仍然使用聚集索引。

image
















本文转自cnn23711151CTO博客,原文链接:http://blog.51cto.com/cnn237111/574782,如需转载请自行联系原作者








版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
数据库技术-数据库索引
数据库技术-数据库索引
17 0
数据库索引原理
数据库索引原理
13 0
数据库索引,真的越建越好吗?(上)
索引是提高关系型数据库查询性能的利器,但其并非银弹,必须精通其原理,才能发挥奇效。
22 0
数据库索引,真的越建越好吗?(中)
索引是提高关系型数据库查询性能的利器,但其并非银弹,必须精通其原理,才能发挥奇效。
30 0
数据库索引原理及优化
摘要: 本文内容主要来源于互联网上主流文章,只是按照个人理解稍作整合,后面附有参考链接。 本文内容主要来源于互联网上主流文章,只是按照个人理解稍作整合,后面附有参考链接。 一、摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。
1301 0
数据库索引原理及优化
本文内容主要来源于互联网上主流文章,只是按照个人理解稍作整合,后面附有参考链接。 一、摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是
2457 0
数据库索引原理及优化
本文内容主要来源于互联网上主流文章,只是按照个人理解稍作整合,后面附有参考链接。 一、摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是
5603 0
+关注
10138
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载