MySQL 索引
B+树
- 特点
- 红黑树,平衡二叉树的树高更高,性能更差
- 对比
- 跳表在极端条件下会退化成链表、平衡性差
- B树堆范围查询不友好,非叶子结点需要磁盘IO
索引的代价
- 索引本身占用磁盘存储空间
- 在运行时索引会被加载到内存中,消耗内存
- 在增删改的时候,需要同步索引
分类
- 聚簇索引
- 叶子节点存储数据
- 前缀索引
- 如果索引的某个列,只包含该列值的前一部分
- 覆盖索引
- 全文索引
- hash索引: innodb不支持
最左匹配原则
- 区分度
- 字段类型
- 数据量更小,或者mysql认为全表扫描更快
什么情况下不使用索引
!=
,like
- 使用了特殊表达式,包括运算和函数
索引与null
is null
可以使用索引- 唯一索引支持多行的值都是null