5.1 索引
索引是帮助 MySQL 高效获取数据的数据结构。
索引用于快速查找具有特定值的行。如果没有索引,MySQL 必须从第一行开始,然后遍历整个表来找到相应行。表越大,成本就越高。如果表有相关列的索引,MySQL 就可以快速确定要在查找的位置,无需查看所有数据,这比顺序读取每一行要快的多。
5.1.1 索引分类
主键索引
唯一的标识,主键不可重复,只能有一个列作为主键。
唯一索引
避免重复的列出现,唯一索引可以重复。
聚簇索引
提示
When you define a PRIMARY KEY
on a table, InnoDB
uses it as the clustered index. A primary key should be defined for each table. If there is no logical unique and non-null column or set of columns to use a the primary key, add an auto-increment column. Auto-increment column values are unique and are added automatically as new rows are inserted.
非聚簇索引
什么是聚簇索引?
B+ 树的叶子结点存储的是完整的用户记录,也就是所有列的值(包括隐藏列)。
什么是二级索引?
B+ 树的叶子结点存储的是某一列 + 主键的的值。
什么是联合索引?
联合索引能减少扫描行数
索引的代价
空间代价
每建立一个索引,都要为它建立一颗 B+ 树。每一颗 B+ 树的每一个结点都是一个数据页,一个数据页会默认占用 16KB 的存储空间。
时间代价
每当对表中的数据进行增删改操作时,都需要修改各个 B+ 树索引。
索引的基本原理
索引就相当于目录,方便查找书的内容。