数据库索引详解

简介:

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

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

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

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

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

image

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

image

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

image
















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








相关文章
|
7天前
|
数据库 索引
数据库索引的作用和优点缺点
数据库索引的作用和优点缺点
11 0
|
1月前
|
存储 搜索推荐 关系型数据库
深度探讨数据库索引的数据结构及优化策略
深度探讨数据库索引的数据结构及优化策略
|
3月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶-索引
摘要:MySQL基本概念、优缺点、索引结构与常见面试题、使用规则(最左前缀、索引失效、覆盖索引)、索引使用注意事项、索引设计原则。
249 2
|
3月前
|
数据库 索引 OceanBase
OceanBase数据库设置了二级索引,但查看执行计划,没有反应出来,这种情况是为什么呢?
OceanBase数据库设置了二级索引,但查看执行计划,没有反应出来,这种情况是为什么呢?【1月更文挑战第12天】【1月更文挑战第60篇】
45 2
|
1月前
|
存储 关系型数据库 MySQL
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
154 0
|
3月前
|
SQL 关系型数据库 MySQL
|
1月前
|
存储 缓存 负载均衡
数据库性能优化(查询优化、索引优化、负载均衡、硬件升级等方面)
数据库性能优化(查询优化、索引优化、负载均衡、硬件升级等方面)
|
1月前
|
存储 SQL 关系型数据库
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
56 0
|
2月前
|
存储 关系型数据库 数据库
数据库索引的原理,为什么要用 B+树,为什么不用二叉树?
数据库索引的原理,为什么要用 B+树,为什么不用二叉树?
|
2月前
|
存储 算法 关系型数据库
向量数据库的索引技术
【2月更文挑战第2天】向量数据库的索引技术
77 0

热门文章

最新文章