⌂ 课程索引第 7 章 · 第二讲

给表编一份目录

没有索引,MySQL 找数据只能从头翻到尾;有了索引,就像查字典先看目录,几步就找到了。
今天弄懂:索引为什么快?它有什么代价?怎么建、怎么看、怎么删?

→ / 空格 / 翻页笔:下一步 ←:上一步 + -:字号 F:全屏

📖 一页一页翻没有索引0 页
🔖 先查目录有索引0 步
第 1 层→第 2 层→第 3 层→✓ 第 87 页
要找的内容在第 87 页
🧭 先想一想 点击卡片翻面
1

为什么需要索引

一行一行找 vs 按目录找

🧑‍💻
📍 场景 · 教务系统"学校有 2 万名学生。按姓名查一个学生,页面要转好几秒。"
表里的姓名是乱序的,MySQL 只能从第 1 行开始,一行一行比,2 万行都要看一遍。
给姓名建一个索引:另外存一份“按姓名排好序的目录”,查的时候先查目录,三四步就找到了。
索引就是表的目录:把某一列的值排好序,记下每个值在哪一行。它多占一点空间,换来查得更快。
2

索引长什么样,怎么用它查

以选课表 sc 的成绩 score 为例

建索引:把成绩取出来、排好序,分成几组放进叶子;上面再放一个根,记住每组从几分开始。查找时从根 → 叶子,几步就到。
📌 记住
  • 索引 = 排好序的值 + 这一行在哪里
  • 查找从根走到叶子,每层只看一个节点
  • 这种结构叫 B+ 树,MySQL 默认就用它
3

索引不是越多越好

索引的代价与设置原则

索引让查询变快,但每次插入、修改、删除数据,每个索引都要跟着改,还要多占空间。
这一列该不该建索引?先自己判断,再点按钮
📋 设置原则
原则为什么
① 索引不要建太多,用不到的及时删掉每个索引都要随着增删改一起维护
② 重复值很多的列(如性别)不建只有两种值,用索引也筛不掉多少行
③ 经常用来查询、排序、分组、连接的列,适合建排好序的目录,正好派上用场
④ 视图上不能建索引视图里没有数据,查视图时用的是基本表的索引
4

索引的类型

重点掌握:普通索引、唯一索引、主键索引

最常用的是三种:普通索引(值可以重复)、唯一索引(值不能重复)、主键索引(定义主键时自动建)。点左边的索引看它的类型。
普通 · 唯一 · 主键
值能重复吗一张表能有几个
普通索引能多个
唯一索引不能多个
主键索引不能,也不能为空1 个
📖 了解一下
  • 索引建在 1 个字段上叫单列索引,建在几个字段上叫复合索引
  • 定义主键和外键时,MySQL 会自动建索引
  • 教材里还有全文索引、Hash 索引、聚集索引等,了解名字即可
5

创建索引:三种写法

CREATE INDEX、建表时创建、ALTER TABLE 添加

最常用:CREATE INDEX 索引名 ON 表名 (字段名); 加上 UNIQUE 就是唯一索引。
三种写法右边是建好后用 SHOW INDEX 看到的结果
6

查看与删除索引

SHOW INDEX;DROP INDEX

查看:SHOW INDEX FROM 表名; 删除:DROP INDEX 索引名 ON 表名; 或 ALTER TABLE 表名 DROP INDEX 索引名;
删除索引两种写法效果一样
📌 记住
  • SHOW INDEX 里,索引的每个字段占一行
  • Non_unique:0 是唯一索引,1 是普通索引
  • 删除索引不会删掉表里的数据
✓

课堂小测

点击选项,立即看对错;答错了可以再选

一页总结
保山学院 · 人工智能教研室 · 曹鼎鼎 | 数据库原理与应用 · 第 7 章 视图和索引