【MySQL-索引调优】05:索引相关概念

索引

  • 索引的本质是一种数据结构。在InnoDB存储引擎中,索引底层采用B+Tree实现
  • 可以理解为数据库在数据表之外维护了一棵(或多棵)有序的B+Tree,用于加快数据查询速度

1-聚簇索引

如果定义了主键,InnoDB会使用主键作为聚簇索引。聚簇索引的B+Tree叶子节点存储的是整行数据,因此通过主键索引可以直接获取整条记录

2-二级索引

你在其他列上建的索引,就是二级索引

二级索引的叶子节点存储的是主键值,而不是整行数据

查询时会先通过二级索引找到主键,再通过主键索引找到整行数据,这个过程叫回表

3-影响

索引可以提高查询速度,但不能无限制创建

因为在执行 INSERT、UPDATE、DELETE 时,不仅需要修改表数据,还需要同步维护所有相关索引的 B+Tree 结构

索引过多会降低数据写入性能,并增加存储空间占用

4-简单B+tree概念

只需要理解:

4-1.为什么查得快

因为:

复制代码
B+树高度很低

一般:

复制代码
1000万数据
树高可能才 3~4 层

查找:

复制代码
3~4 次磁盘IO

4-2. 为什么范围查询快

B+树叶子节点:

复制代码
是链表

所以:

复制代码
WHERE id BETWEEN 1000 AND 2000

可以:

复制代码
1000 → 1001 → 1002 → ... → 2000

顺序扫描

相关推荐
@insist1235 小时前
信息安全工程师-数据库安全全体系解析与最佳实践
数据库·安全·软考·信息安全工程师·软件水平考试
_ku_ku_6 小时前
数据库系统原理 · 事务管理与恢复 · 自学总结
数据库·oracle
lifewange7 小时前
Redis 集合(Set)运算完全指南
数据库·chrome·redis
TDengine (老段)7 小时前
TDengine RAFT共识协议 — 选举、日志复制、快照与仲裁
android·大数据·数据库·物联网·架构·时序数据库·tdengine
Full Stack Developme8 小时前
Spring Boot 事务管理完整教程
java·数据库·spring boot
m0_7020365310 小时前
mysql如何通过索引减少行锁范围_mysql索引与加锁逻辑
jvm·数据库·python
qxwlcsdn10 小时前
如何用 IndexedDB 存储从 API 获取的超大列表并实现二级索引
jvm·数据库·python
phltxy10 小时前
Redis 主从复制
java·数据库·redis
2301_8092445310 小时前
C#怎么使用协变和逆变 C#泛型中的in和out关键字协变逆变是什么意思怎么用【语法】
jvm·数据库·python
知识汲取者11 小时前
巨量引擎营销 API 完整文档
开发语言·数据库·python