目录
Mysql索引
索引是什么
排好序的数据结构 - 索引列:K-索引字段值 V-存储地址,减少IO
索引分类
按物理存储分类:聚集索引(主键构造一颗 B+tree,主键+行数据)、非聚集索引(也叫二级索引、辅助索引,数据主键(指针))
按数据结构分类:B+tree索引、Hash索引、Full-text索引
按字段特性(应用层次)分类:唯一索引(UNIQUE)、主键索引(PRIMARY KEY)、普通索引(INDEX)、全文索引(FULLTEXT)
按字段个数分类:单列索引、联合索引(也叫复合索引、组合索引)
索引数据结构
二叉树
对递增列不能有效减少查找次数
红黑树
平衡二叉树,自平衡,随数据量增加树高度会增加
Hash表
优点:对索引的key进行一次hash计算就可以定位出数据存储的位置
不足:仅能满足 “=”,“IN”,不支持范围查询以及hash冲突问题
B-Tree
节点既包含索引键值,又包含指向子节点的指针,叶子节点指针为空
所有索引元素不重复,节点中的数据索引从左到右递增排列
B+Tree
B-Tree变种,非叶子节点不存储数据,只存储索引(冗余,常驻内存),叶子节点包含所有索引及索引指向的值,叶子节点从左到右顺序排列且节点间有指针连接(提高区间访问的性能,不用回到根节点查询)
页大小约16KB
表存储引擎
类型
MyISam
索引文件和数据文件是分离的(非聚集索引)
InnoDB
主键索引
叶节点包含了完整的数据记录(聚集索引)
表数据文件本身就是按B+Tree组织的一个索引结构文件 - 索引K使用主键,无主键则默认创建隐藏列
非主键索引
叶子节点存储主键值:一致性(保持与主键索引一致)、节省存储空间(免除与主键索引重复存储的列数据)
复合索引(联合索引)
根据索引字段顺序依次比较ASCII码排序 - 叶子节存储主键索引,回表查找数据
最左前缀原理:查询条件字段顺序与索引字段顺序保持一致使用