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

MySQL索引与优化

专题说明

本专题全面介绍MySQL索引设计与查询优化,帮助开发者掌握索引基础原理、各类索引特点、优化策略、执行计划解读等核心技能,从根本上提升数据库查询性能。

学习目标

  1. 理解索引的基本概念与作用
  2. 掌握各类索引的特点与适用场景
  3. 学会索引优化设计策略
  4. 掌握查询优化的常用方法
  5. 学会使用EXPLAIN分析执行计划

学习内容

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

  • 索引基础:索引概念、索引作用、索引代价、索引原理
  • 索引类型:普通索引、唯一索引、主键索引、全文索引、联合索引
  • 索引优化策略:索引设计原则、最左前缀原则、选择性优化、避免索引失效
  • 查询优化:EXPLAIN使用、查询改写、避免全表扫描、优化JOIN
  • 执行计划分析:type字段解读、key字段分析、rows预估、Extra字段含义

学习建议

  1. 先理解索引原理,再学习优化策略
  2. 重点掌握最左前缀原则和索引失效场景
  3. 学会使用EXPLAIN分析每条重要SQL
  4. 实践中验证优化效果,形成优化习惯
  5. 索引不是越多越好,每个索引都要有明确用途

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

📝 配套习题(20 题)

1
单选题

数据库索引的主要作用是什么?

A

增加存储空间

B

提高查询速度,快速定位数据

C

减少数据量

D

自动清理数据

2
单选题

MySQL创建索引的基本语法是什么?

A

ADD INDEX idx_name ON table(column)

B

CREATE INDEX idx_name ON table(column)

C

NEW INDEX idx_name ON table(column)

D

INSERT INDEX idx_name ON table(column)

3
判断题

索引可以提高查询速度,但会增加写操作(INSERT、UPDATE、DELETE)的开销和占用额外存储空间。

A

B

4
单选题

如何查看表的索引信息?

A

SHOW INDEXES FROM table_name 或 SHOW INDEX FROM table_name

B

GET INDEX table_name

C

LIST INDEX table_name

D

DISPLAY INDEX table_name

5
单选题

MySQL的主键(PRIMARY KEY)会自动创建索引吗?

A

不会自动创建索引

B

会自动创建索引,且是聚簇索引

C

需要手动创建索引

D

只创建普通索引

6
单选题

普通索引(Normal Index)的特点是什么?

A

值必须唯一

B

值可以重复,是最基本的索引类型,无特殊限制

C

只用于主键

D

不允许NULL值

7
单选题

唯一索引(Unique Index)的特点是什么?

A

值可以重复

B

值必须唯一,不允许重复值(但允许多个NULL)

C

只用于外键

D

自动生成值

8
判断题

主键索引是特殊的唯一索引,不允许NULL值,而唯一索引允许NULL值。

A

B

9
单选题

组合索引(复合索引)是什么?

A

只包含一个列的索引

B

包含多个列的索引,多个列组合在一起建立索引

C

多个单列索引的组合

D

主键和外键的组合

10
单选题

组合索引(name, age, city),以下哪个查询无法使用该索引?

A

WHERE name = '张三'

B

WHERE name = '张三' AND age = 20

C

WHERE name = '张三' AND age = 20 AND city = '北京'

D

WHERE age = 20 AND city = '北京'

11
单选题

索引设计的基本原则是什么?

A

为所有列都创建索引

B

为经常用于查询条件、排序、分组的列创建索引,避免不必要的索引

C

只为主键创建索引

D

不创建任何索引

12
单选题

什么是索引选择性?什么样的列更适合建索引?

A

选择性是列的长度,长列适合建索引

B

选择性是不同值的比例,选择性高(值差异大)的列更适合建索引

C

选择性是数据量,数据量大的列适合建索引

D

选择性是更新频率,频繁更新的列适合建索引

13
判断题

组合索引设计时,应将选择性高(区分度大)的列放在前面,将查询频率高的列放在前面。

A

B

14
单选题

什么是覆盖索引?它的优势是什么?

A

索引覆盖整张表

B

查询所需的所有列都在索引中,无需回表查询数据行

C

索引覆盖所有列

D

索引覆盖所有表

15
单选题

查询优化的第一步是什么?

A

直接修改SQL语句

B

使用EXPLAIN分析执行计划,了解查询如何执行

C

增加服务器内存

D

创建更多索引

16
单选题

为什么建议避免使用 SELECT *?

A

SELECT *语法错误

B

SELECT *查询所有列会增加数据传输量,应只查询需要的列

C

SELECT *会删除数据

D

SELECT *会锁表

17
判断题

使用LIMIT限制返回行数可以减少数据传输量,提高查询效率,特别是在只需要部分数据时。

A

B

18
单选题

EXPLAIN命令的作用是什么?

A

执行SQL语句

B

显示SQL语句的执行计划,了解MySQL如何执行查询

C

修改SQL语句

D

创建索引

19
单选题

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

A

使用了索引查询效率最高

B

全表扫描效率最低应优化添加索引

C

使用了范围查询

D

使用了JOIN连接

20
单选题

EXPLAIN显示type=ALL、key=NULL、rows=100000、Extra=Using filesort,应该如何优化?

A

不需要优化

B

为WHERE条件和ORDER BY列创建合适的索引,让type变为range/ref,避免filesort

C

增加服务器内存

D

删除所有数据

← 上一个专题 MySQL数据类型
下一个专题 → MySQL高级查询

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

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

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

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