InnoDB中的索引方案

简介: InnoDB中的索引方案

InnoDB中的索引方案

InnoDB支持多种类型的索引,包括B-tree索引、全文索引、哈希索引等。B-tree索引是InnoDB存储引擎的默认索引类型,适用于所有的数据类型,包括字符串、数字和日期等。

以下是创建InnoDB表及其B-tree索引的示例代码:

-- 创建一个带有B-tree索引的InnoDB表
CREATE TABLE example_table (
    id INT NOT NULL AUTO_INCREMENT,
    data VARCHAR(100),
    PRIMARY KEY (id),
    INDEX data_index (data)
) ENGINE=InnoDB;

在这个例子中,example_table表有一个自增的主键id,它是一个聚集索引,即索引的叶子节点包含了整行的数据。另外,表还有一个非聚集索引data_index,它建立在data列上。


要查询带有索引的表,可以使用索引来减少需要扫描的数据行数,从而提高查询效率。例如,以下查询会利用data_index索引来查找特定的data值:

SELECT * FROM example_table WHERE data = 'some_value';

如果查询能够利用索引,MySQL会在执行计划中显示“Using index”。如果查询无法使用索引,则会进行全表扫描,这通常比使用索引慢。


我们分配一个编号为30的页来专门存储目录项记录,页10、28、9、20专门存储用户记录

目录项记录和普通的用户记录的不同点:


  • 目录项记录 的 record_type 值是1,而 普通用户记录 的 record_type 值是0。
  • 目录项记录只有主键值和页的编号两个列,而普通的用户记录的列是用户自己定义的,包含很多列,另外还有InnoDB自己添加的隐藏列。


现在查找主键值为 20 的记录,具体查找过程分两步:

  1. 先到页30中通过二分法快速定位到对应目录项,因为 12 ≤ 20 < 209 ,就是页9。
  2. 再到页9中根据二分法快速定位到主键值为 20 的用户记录。


更复杂的情况如下:


我们生成了一个存储更高级目录项的 页33 ,这个页中的两条记录分别代表页30和页32,如果用户记录的主键值在 [1, 320) 之间,则到页30中查找更详细的目录项记录,如果主键值 不小于320 的话,就到页32中查找更详细的目录项记录。这个数据结构,它的名称是 B+树 。

相关文章
|
2月前
|
存储 算法 关系型数据库
深入理解InnoDB索引数据结构和算法
1. **索引定义**:索引是提升查询速度的有序数据结构,帮助数据库系统快速找到数据。 2. **索引类型**:包括普通索引、唯一索引、主键索引、空间索引和全文索引,每种有特定应用场景。 3. **数据结构**:InnoDB使用B+树作为索引结构,确保所有节点按顺序排列,降低查询时的磁盘I/O。 4. **B+树特性**:所有数据都在叶子节点,非叶子节点仅存储索引,提供高效范围查询。 5. **索引优势**:通过减少查找数据所需的磁盘I/O次数,显著提高查询性能。 **总结:**InnoDB索引通过B+树结构,优化了数据访问,使得查询速度快,尤其适合大数据量的场景。
82 0
深入理解InnoDB索引数据结构和算法
|
2月前
|
存储 关系型数据库 MySQL
索引大战:探秘InnoDB数据库中B树和Hash索引的优劣
索引大战:探秘InnoDB数据库中B树和Hash索引的优劣
28 0
|
2月前
|
存储 SQL 关系型数据库
系统设计场景题—MySQL使用InnoDB,通过二级索引查第K大的数,时间复杂度是多少?
系统设计场景题—MySQL使用InnoDB,通过二级索引查第K大的数,时间复杂度是多少?
63 1
系统设计场景题—MySQL使用InnoDB,通过二级索引查第K大的数,时间复杂度是多少?
|
2月前
|
存储 算法 关系型数据库
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
81 0
|
2月前
|
存储 缓存 关系型数据库
✅InnoDB为什么使用B+树实现索引?
InnoDB使用B+树实现索引,因其具备平衡特性、所有数据存储在叶子节点利于范围查询和排序,且非叶子节点仅含索引关键字,能存储更多数据,减少IO操作并优化缓存利用率。B+树与哈希索引的区别在于,后者适用于等值查询但不支持范围查询和排序,且磁盘访问效率较低。相比于红黑树和B树,B+树更适合数据库索引需求。
|
23天前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】5.1-InnoDB存储引擎索引概述
【MySQL技术内幕】5.1-InnoDB存储引擎索引概述
27 0
|
2月前
|
SQL 算法 关系型数据库
✅Innodb加索引,这个时候会锁表吗?
MySQL 5.6 引入 Online DDL 技术,允许在创建或删除 InnoDB 索引时不阻塞其他会话,减少了锁定和性能影响。不同 DDL 操作支持不同方式,如 COPY、INSTANT 和 INPLACE,具体见官方文档。虽然 Online DDL 可减少阻塞,但可能在索引构建期间仍有锁定,建议在非高峰时段执行并做好测试和规划。MySQL 5.6 之前的 DDL 操作会导致表锁定,而 Online DDL 旨在减少这种阻塞,但并非所有 DDL 语句都适用。了解各种算法如 COPY、INPLACE 和 INSTANT,以及它们的工作原理,有助于优化 DDL 操作。
|
2月前
|
SQL 存储 关系型数据库
【深入浅出MySQL】「底层原理」InnoDB索引原理全程实操指南,带你从入门到精通
【深入浅出MySQL】「底层原理」InnoDB索引原理全程实操指南,带你从入门到精通
73 1
|
2月前
|
存储 关系型数据库 MySQL
mysql 索引的代价(InnoDB)
mysql 索引的代价(InnoDB)
|
19天前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)