数据库索引详解

简介:

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

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

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

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

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

image

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

image

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

image
















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








相关文章
|
4天前
|
存储 缓存 数据库
数据库索引采用B+树不采用B树的原因?
● B+树更便于遍历:由于B+树的数据都存储在叶子结点中,分支结点均为索引,方便扫库,只需要扫一遍叶子结点即可,但是B树因为其分支结点同样存储着数据,我们要找到具体的数据,需要进行一次中序遍历按序来扫,所以B+树更加适合在区间查询的情况,所以通常B+树用于数据库索引。 ● B+树的磁盘读写代价更低:B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性。因此访问叶子节点上关联的数据也具有更好的缓存命中率。 ● B+树的查询效率更加稳定:由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条
|
4月前
|
数据库 索引
深入探索数据库索引技术:回表与索引下推解析
【10月更文挑战第15天】在数据库查询优化的领域中,回表和索引下推是两个核心概念,它们对于提高查询性能至关重要。本文将详细解释这两个术语,并探讨它们在数据库操作中的作用和影响。
98 3
|
4月前
|
数据库 索引
深入理解数据库索引技术:回表与索引下推详解
【10月更文挑战第23天】 在数据库查询性能优化中,索引的使用是提升查询效率的关键。然而,并非所有的索引都能直接加速查询。本文将深入探讨两个重要的数据库索引技术:回表和索引下推,解释它们的概念、工作原理以及对性能的影响。
181 3
|
3月前
|
存储 缓存 数据库
数据库索引采用B+树不采用B树的原因?
B+树优化了数据存储和查询效率,数据仅存于叶子节点,便于区间查询和遍历,磁盘读写成本低,查询效率稳定,特别适合数据库索引及范围查询。
70 6
|
4月前
|
存储 缓存 数据库
数据库索引采用B+树不采用B树的原因
B+树相较于B树,在数据存储、磁盘读写、查询效率及范围查询方面更具优势。数据仅存于叶子节点,便于高效遍历和区间查询;内部节点不含数据,提高缓存命中率;查询路径固定,效率稳定;特别适合数据库索引使用。
69 1
|
5月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
109 3
Mysql(4)—数据库索引
|
4月前
|
数据库 索引
数据库索引
数据库索引 1、索引:建立在表一列或多列的辅助对象,目的是加快访问表的数据。 2、索引的优点: (1)、创建唯一性索引,可以确保数据的唯一性; (2)、大大加快数据检索速度; (3)、加速表与表之间的连接; (4)、在查询过程中,使用优化隐藏器,提高系统性能。 3、索引的缺点: (1)、创建和维护索引需要耗费时间,随数据量增加而增加; (2)、索引占用物理空间; (3)、对表的数据进行增删改时,索引需要动态维护,降低了数据的维护速度。
63 2
|
4月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
785 1
|
4月前
|
存储 关系型数据库 数据库
Postgres数据库BRIN索引介绍
BRIN索引是PostgreSQL提供的一种高效、轻量级的索引类型,特别适用于大规模、顺序数据的范围查询。通过存储数据块的摘要信息,BRIN索引在降低存储和维护成本的同时,提供了良好的查询性能。然而,其适用场景有限,不适合随机数据分布或频繁更新的场景。在选择索引类型时,需根据数据特性和查询需求进行权衡。希望本文对你理解和使用PostgreSQL的BRIN索引有所帮助。
136 0
|
4月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
579 0