数据库原理与应用 第 7 章 · 第五节
课程第 7 章第五节 三种建法两个例子建表时带教室表事后补界面建 版式
第 7 章 视图和索引 · 第五节

创建索引的三种写法

CREATE INDEX、建表时顺带写、ALTER TABLE 事后补。
本 节 知 识 点
  1. 22CREATE INDEX 的格式
  2. 23前缀索引与复合唯一索引
  3. 24建表语句里直接写索引
  4. 25建表带唯一索引的例子
  5. 26表建好了再加索引
  6. 27在 Workbench 里建索引
22
第 7 章 · 第五节

CREATE INDEX 的格式

索引名后面接 ON 表名,括号里写要索引哪几列。

第 22 页课件

关键术语

索引字符长度prefix
只拿这一列前几个字节建索引,省空间
单列索引single
括号里只写一列
复合索引composite
括号里写好几列,顺序有讲究

重 点

UNIQUE 建出来的是唯一索引,它既能提速,又顺带把这一列的重复值挡住。

23
第 7 章 · 第五节

前缀索引与复合唯一索引

一个只索引姓名的前六个字节,一个把两列绑在一起。

第 23 页课件

试一试复合索引先按哪一列排

WHERE 里写
索引 c_cn_ct_index (cn, ct) 先按课程名排,名字相同再按课时排
复合索引像先按姓再按名排的名册,跳过姓直接找名字是找不着的。

重 点

复合索引的列序不能随便写,写在前面的那一列决定了它能不能被用上。

上机做

上机三第 2 题 建前缀索引

想一想

只索引姓名的前六个字节,会漏掉同姓的人吗?

24
第 7 章 · 第五节

建表语句里直接写索引

列定义写完之后,再补几行 INDEX 或者 UNIQUE INDEX。

第 24 页课件

重 点

表刚设计出来就知道要按哪一列查,就在建表时一起写,省得事后再补。

想一想

建表时写的 PRIMARY KEY 算不算一个索引?

25
第 7 章 · 第五节

建表带唯一索引的例子

教室编号加教学楼名两列合起来不许重复。

第 25 页课件

重 点

两列合起来唯一,单看任一列都可以重复,这正是复合唯一索引的用处。

练一练

classroom 表上 UNIQUE INDEX cn_cb_index(crno, cbn),下面哪种数据会被拦?
  1. A两行都是 101 号明德楼
  2. B两行都是 101 号,楼不同
  3. C两行都在明德楼,号不同
答案 A

唯一的是两列合起来的组合,只有两列都一样才算重复。

上机做

上机三第 5 题 建表时带索引

26
第 7 章 · 第五节

表建好了再加索引

ALTER TABLE 加上 ADD INDEX,一条语句能补好几个。

第 26 页课件

重 点

事后补索引会锁表重建,几百万行的表上别在上班时间做这件事。

分清楚两种写法

写法什么时候用
CREATE INDEX补单独一个
ALTER TABLE ADD一次补好几个

上机做

上机三第 6 题 事后补一个索引

想一想

上线之后才发现查得慢,还来得及补索引吗?

27
第 7 章 · 第五节

在 Workbench 里建索引

右键表的 Indexes 节点选 Create Index,勾要索引的列。

第 27 页课件

重 点

界面上要填的索引名、字段长度、索引类型,就是命令里那几个参数。

知道更多并发锁那一栏

界面上还有一栏问加索引时锁不锁表,命令行的默认值就是尽量不锁。

保山学院·人工智能教研室·曹鼎鼎