Mysql InnoDB 引擎默认使用的索引数据结构是 B+ 树,不过这里仍使用“B 树”术语来代替,因为 Mysql 在 create table 和其他语句中也使用该关键字,而且 Mysql 中的索引是在存储引擎层而不是服务器层实现的,所以并没有统一的索引标准,底层的存储引擎也可能使用不同的存储结构。
存储引擎以不同的方式使用 B 树索引。例如,MyISAM 使用前缀压缩技术使得索引更小,但 InnoDB 则按照原数据格式进行存储。再如 MyISAM 索引通过数据的物理位置引用被索引的行,而 InnoDB 则根据主键引用被索引的行。
B 树通常意味着所有的值都是按照顺序存储的,并且每一个叶子到根的距离都相同。因为 B 树对索引列是顺序存储的,所以很适合查找范围数据。
假设有这样一张表:
CREATE TABLE People(
last_name varchar(50) not null,
first_name varchar(50) not null,
dob date not null,
gender enum('m', 'f') not null,
key(last_name, first_name, dob)
);
这里对于表中的每一行数据,索引中包含了 last_name、first_name 和 dob 列的值。下图显示了该索引是如何组织数据的存储的。
索引对多个值进行排序的依据是 CREATE TABLE 语句中定义索引时列的顺序。B 树索引适用于全键值、键值范围或键前缀查找,其中键前缀查找只适用于根据最左前缀的查找。这里所说的索引对如下类型的查询有效。
(1)全值匹配,指的是和索引中的所有列进行匹配。
(2)匹配最左前缀,例如上面的索引可用于查找所有姓为 Allen 的人。
(3)匹配列前缀,即只匹配某一列的值的开头部分。例如上面的索引可用于查找所有以 J 开头的姓的人。
(4)匹配范围值,例如上面的索引可用于查找所有姓在 Allen 和 Barrymore 之间的人。
(5)精确匹配某一列并范围匹配另外一列,例如上面的索引可用于查找所有姓为 Allen 并且名字以 K 开头的人。
因为索引树中的节点是有序的,所以索引还可用于 ORDER BY 操作,只要它满足上面列出的这几种查询类型,那么这个索引就可以满足对应的排序需求。
不过 B 树索引也有这样一些限制:
(1)如果不是按照索引的最左列开始查找,则无法使用索引。
(2)不能跳过索引中的列。例如上面的索引无法用于查找姓为 Smith 并且咋某个特定日期出生的人。如果不指定 first_name,则 mysql 只能使用索引的第一列。
(3)如果查询中有某个列的范围查询,则其右边所有列都无法使用索引优化查找。例如查询条件“WHERE last_name='Smith' AND first_name LIKE 'J%' AND dob='1976-12-23'”将只能使用索引的前两列,因为这里的 LIKE 是一个范围条件(但是服务器可把其余列用于其他目的)。
由此可见索引列的顺序非常重要,优化性能的时候也是应该考虑的。
- 大小: 75.4 KB
分享到:
相关推荐
**深入研究B树索引** B树(B-tree)是一种自平衡的树数据结构,广泛应用于数据库和文件系统中,特别是在实现索引存储时。它能够保持数据有序,允许快速查找、插入和删除操作。本篇文章将深入探讨B树的核心概念、...
**B树概述** B树(Balanced Tree),全称为自平衡二叉查找树,是一种能够保持数据平衡的多路搜索树。它最初由Rudolf Bayer在1972年提出,主要应用于数据库和文件系统等领域,以解决大规模数据存储时的效率问题。B树...
标题与描述概述的知识点主要集中在Oracle数据库优化中的B树索引概念,这涉及到数据库管理、数据结构以及查询优化的关键方面。下面将详细阐述这些概念及其在Oracle环境中的应用。 ### B树及其变种 #### B树的引入 B...
### 多维空间对象BR树索引机制研究 #### 引言 在现代数据库系统中,尤其是处理地理信息系统(GIS)或图像识别等涉及多维数据的应用场景时,高效的索引机制至关重要。传统的R树虽然在空间数据索引方面表现突出,但...
B+树是一种特殊的B树,广泛应用于数据库索引和文件系统中,因为它提供了更好的查询性能,特别是范围查询。 **特点:** - 所有数据都存储在叶子节点中,而非叶子节点仅包含键; - 叶子节点之间通过指针相连,方便...
**B树概述** B树(B-tree)是一种自平衡的树数据结构,广泛应用于数据库和文件系统中,因为它能够保持数据排序,使得对数据的搜索、插入和删除操作的平均时间复杂度为O(log n)。B树的主要特点是每个节点可以有多...
#### B树与B+树概述 B树是一种自平衡的树数据结构,常用于数据库和其他磁盘存储系统中。它具有高效的查找、插入和删除性能,尤其适用于大型数据库系统。B树的一个变体称为B+树,两者在结构上存在一定的差异,但在...
### B树代码实现概述 根据提供的部分代码,我们可以看到一个典型的B树结构定义和相关的函数声明。以下是对这些代码的简要分析: 1. **数据结构定义**: ```c typedef struct btnode { int d; // 节点中的键的...
与B树相比,B+树的所有叶子节点都位于同一层,且叶子节点之间通过指针相互连接,这使得B+树非常适合范围查询和顺序访问。 #### 三、代码结构分析 1. **文件头注释**: - 作者:bysvking - 时间:2012年5月 - ...
### B+树概述 B+树是一种自平衡的树数据结构,常用于实现虚拟内存、文件系统和数据库索引。它是由Rudolf Bayer和Ed McCreight在1970年代初期提出的,旨在优化磁盘读写操作。B+树的设计重点在于减少查找、插入和删除...
2. **B-+树**:B-+树是一种特殊的B-树,它的所有数据都存储在叶子节点上,而非叶子节点只存储索引信息。这样设计的好处是可以减少磁盘I/O次数,并且便于进行范围查询。B-+树中,叶子节点之间通过指针相互连接,形成...
**B+树与B-树概述** B+树和B-树是计算机科学中用于数据库和文件系统等数据存储的重要数据结构,它们主要用于高效地管理大量数据,特别是当数据需要在磁盘等慢速存储介质上进行操作时。这两种树都是自平衡的,能保持...
**B树概述** B树(B-tree)是一种自平衡的查找树数据结构,它能够保持数据排序,适合作为数据库和文件系统的索引结构。B树的主要特点是节点可以拥有多个子节点,通常远多于二叉树。这种数据结构允许在磁盘或其他...
#### 一种基于有序二叉树的高效优化索引树的概述 传统的Trie树(又称前缀树)是一种用于存储字符串集合的树形数据结构。它通过将字符串的公共前缀共享节点的方式,提高了存储效率和检索速度。然而,在实际应用中,...
本讲义主要涵盖了索引的基础知识,包括B树索引和位图索引的创建、删除以及管理。 首先,索引概述中提到,索引的主要目的是加速数据检索,但同时也会影响数据更新的速度,因为每次数据更改都需要同步更新索引。...
树还有其他变种,例如平衡树、B树、红黑树等,它们各自针对不同的应用场景,优化了树的特定操作,如插入、删除和查找。 总结树的结构和特性,理解树在计算机科学中的应用,对于深入学习数据结构与算法、理解复杂...
- **B*树:** 是B树的一种变种,具有额外的横向指针,可以更好地保持树的平衡性。 **B+树的分裂:** 当向B+树中插入新数据导致节点过满时,会触发节点分裂,以保持树的平衡。例如,向已满的节点中插入新记录时,会...