索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。当数据量十分庞大时,索引可以高效的获取到数据所在的地址,而无需全表扫描,大大减少IO次数。
因为mysql支持多存储引擎,如常用的InnoDB和MyISAM引擎,针对不同的引擎,会有不同的索引类型,如主键索引、唯一索引、普通索引、全文索引、组合索引等。
主键索引:不允许重复、不允许控制
唯一索引:值唯一、可以为空
普通索引:无限制,可值可重复,可为空
全文索引:对大文本字段构建的索引
组合索引:多个字段联合起来构建的索引,这些列中的值不允许有空值,有空值,索引失效。
组合索引遵循最左匹配原则
-
- 索引的底层原理
以MyISAM和InnoDB为例讲解下索引的底层原理:
-
-
- MyISAM数据文件结构[E1]
-
.frm文件:存储表结构元数据
.MYD文件:即MY Data,表数据文件
.MYI文件:即MY Index,索引文件
-
-
- InnoDB数据文件结构
-
.frm文件:存储表结构元数据
.ibd文件:单表表空间文件,每个表使用一个表空间文件(file per table),存放用户数据库表数据和索引
查看视频