全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📝 1 篇文章 20 道配套习题

索引深度与性能调优

专题说明

本专题深入剖析MySQL索引底层原理与性能调优策略,帮助开发者掌握索引设计最佳实践、避免索引失效陷阱、精准解读执行计划,从根本上提升数据库查询性能。

学习目标

  1. 理解B+树索引结构与原理
  2. 掌握聚簇索引与二级索引的工作机制
  3. 理解索引覆盖与回表查询的区别
  4. 掌握索引失效场景分析与规避方法
  5. 学会使用执行计划解读进行SQL优化

学习内容

本专题涵盖以下核心知识点:

  • B+树索引结构:B+树特点、叶子节点链表、高度与查询效率
  • 索引类型与适用场景:主键索引、唯一索引、普通索引、全文索引
  • 聚簇索引与二级索引:索引组织表、叶子节点结构、主键回表机制
  • 索引覆盖与回表查询:覆盖索引优化、避免回表的策略
  • 索引选择性与基数:选择性计算、高选择性列优先原则
  • 索引优化原则:最左前缀、索引列顺序、避免冗余索引
  • 索引失效场景:函数操作、类型转换、范围查询后索引失效
  • 慢查询日志与分析:慢查询配置、pt-query-digest分析工具
  • 执行计划解读:EXPLAIN关键字、type/access_type分析、key分析

学习建议

  1. 先理解B+树原理,再学习索引优化策略
  2. 重点掌握聚簇索引与二级索引的区别,理解回表成本
  3. 熟记索引失效场景,避免常见踩坑
  4. 多练习EXPLAIN解读,形成分析执行计划的习惯
  5. 结合慢查询日志实践,从实际问题出发进行优化

📝 发现内容有误?点击此处直接编辑

📝 配套习题(21 题)

1
单选题

InnoDB存储引擎使用什么结构来组织索引?

A

B树

B

B+树

C

哈希表

D

跳表

2
单选题

InnoDB的B+树索引通常有多少层?每层查找需要多少次IO?

A

1-2层,需要1-2次IO

B

2-4层,每层需要1次IO

C

3层左右,每层需要1次IO,通常最多3次IO

D

10层以上,需要多次IO

3
多选题

B+树索引结构具有以下哪些特点?

A

所有数据存储在叶子节点

B

非叶子节点只存储键值和指针

C

叶子节点通过链表连接

D

树的高度通常较低

E

支持高效的范围查询

4
单选题

创建索引时应该遵循什么基本原则?

A

为所有列都创建索引

B

只为经常查询的列创建索引

C

只为主键创建索引

D

不创建任何索引

5
多选题

以下哪些是索引优化的正确原则?

A

选择区分度高的列作为索引

B

组合索引遵循最左匹配原则

C

避免在频繁更新的列上建索引

D

索引列尽量使用短字段

E

使用覆盖索引减少回表

6
单选题

MySQL中主键索引属于什么类型的索引?

A

普通索引

B

唯一索引

C

聚簇索引

D

全文索引

7
多选题

MySQL支持以下哪些索引类型?

A

普通索引(Normal Index)

B

唯一索引(Unique Index)

C

主键索引(Primary Key)

D

全文索引(Fulltext Index)

E

空间索引(Spatial Index)

8
单选题

查询优化最基本的手段是什么?

A

增加服务器内存

B

使用索引覆盖查询

C

分析执行计划

D

使用更复杂的SQL

9
多选题

以下哪些是常用的查询性能调优技巧?

A

避免 SELECT *,只查询需要的列

B

使用 LIMIT 限制返回行数

C

避免在 WHERE 条件中使用函数

D

优化 JOIN 操作,小表驱动大表

E

使用覆盖索引避免回表

10
单选题

什么是索引的选择性(Selectivity)?

A

索引被查询使用的频率

B

索引列中不同值的数量占总行数的比例

C

索引占用的存储空间大小

D

索引更新操作的次数

11
判断题

对于选择性很低的列(如性别只有男/女两个值),建立索引可以有效提高查询性能。

A

B

12
单选题

InnoDB中聚簇索引的特点是什么?

A

索引和数据分开存储

B

索引和数据存储在一起,数据按索引键顺序存储

C

只存储索引键值

D

可以有多个聚簇索引

13
判断题

一张InnoDB表可以有多个聚簇索引。

A

B

14
单选题

InnoDB的二级索引(非聚簇索引)叶子节点存储的是什么内容?

A

完整的数据行

B

索引键值和数据行指针

C

索引键值和主键值

D

只存储索引键值

15
单选题

什么是回表查询?

A

返回表结构的查询

B

通过二级索引找到主键,再到聚簇索引查找完整数据的查询

C

查询表的所有列

D

使用索引的查询

16
判断题

覆盖索引是指查询所需的列都在索引中,不需要回表查询聚簇索引。

A

B

17
单选题

以下哪种情况会导致索引失效?

A

查询使用索引列作为WHERE条件

B

WHERE条件中对索引列使用函数

C

使用索引列进行等值比较

D

使用覆盖索引查询

18
多选题

以下哪些场景会导致索引失效?

A

WHERE条件中使用函数作用于索引列

B

WHERE条件中使用OR连接非索引列

C

LIKE查询以通配符开头 LIKE '%abc'

D

组合索引不满足最左匹配原则

E

索引列参与计算 WHERE a+1=2

19
单选题

MySQL的慢查询日志主要用于什么目的?

A

记录所有SQL语句

B

记录执行时间超过阈值的SQL语句,用于性能优化分析

C

记录错误的SQL语句

D

记录事务日志

20
单选题

使用什么命令查看MySQL的SQL执行计划?

A

SHOW PLAN

B

EXPLAIN

C

DESCRIBE

D

ANALYZE

21
单选题

EXPLAIN执行计划中type列显示const表示什么?

A

全表扫描

B

索引范围扫描

C

主键或唯一索引的等值查询,最多匹配一行

D

使用了常量

← 上一个专题 底层原理与存储引擎
下一个专题 → 锁事务与并发控制

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库