全部学科
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

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

A

B

2

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

A

B

3

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

A

B

单选题
4

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

A

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

B

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

C

使用索引列进行等值比较

D

使用覆盖索引查询

5

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

A

记录所有SQL语句

B

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

C

记录错误的SQL语句

D

记录事务日志

6

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

A

普通索引

B

唯一索引

C

聚簇索引

D

全文索引

7

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

A

全表扫描

B

索引范围扫描

C

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

D

使用了常量

8

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

A

增加服务器内存

B

使用索引覆盖查询

C

分析执行计划

D

使用更复杂的SQL

9

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

A

SHOW PLAN

B

EXPLAIN

C

DESCRIBE

D

ANALYZE

10

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

A

索引被查询使用的频率

B

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

C

索引占用的存储空间大小

D

索引更新操作的次数

11

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

A

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

B

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

C

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

D

10层以上,需要多次IO

12

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

A

索引和数据分开存储

B

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

C

只存储索引键值

D

可以有多个聚簇索引

13

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

A

为所有列都创建索引

B

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

C

只为主键创建索引

D

不创建任何索引

14

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

A

完整的数据行

B

索引键值和数据行指针

C

索引键值和主键值

D

只存储索引键值

15

什么是回表查询?

A

返回表结构的查询

B

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

C

查询表的所有列

D

使用索引的查询

16

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

A

B树

B

B+树

C

哈希表

D

跳表

多选题
17

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

A

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

B

使用 LIMIT 限制返回行数

C

避免在 WHERE 条件中使用函数

D

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

E

使用覆盖索引避免回表

18

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

A

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

B

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

C

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

D

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

E

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

19

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

A

所有数据存储在叶子节点

B

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

C

叶子节点通过链表连接

D

树的高度通常较低

E

支持高效的范围查询

20

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

A

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

B

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

C

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

D

索引列尽量使用短字段

E

使用覆盖索引减少回表

21

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

A

普通索引(Normal Index)

B

唯一索引(Unique Index)

C

主键索引(Primary Key)

D

全文索引(Fulltext Index)

E

空间索引(Spatial Index)

参考答案
1.正确 2.错误 3.错误 4.B 5.B 6.C 7.C 8.C 9.B 10.B 11.C 12.B 13.B 14.C 15.B 16.B 17.A;B;C;D;E 18.A;B;C;D;E 19.A;B;C;D;E 20.A;B;C;D;E 21.A;B;C;D;E
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 底层原理与存储引擎
下一个专题 → 锁事务与并发控制
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码