MySQL 索引

B+树

  • 特点
    • 红黑树,平衡二叉树的树高更高,性能更差
  • 对比
    • 跳表在极端条件下会退化成链表、平衡性差
    • B树堆范围查询不友好,非叶子结点需要磁盘IO

索引的代价

  • 索引本身占用磁盘存储空间
  • 在运行时索引会被加载到内存中,消耗内存
  • 在增删改的时候,需要同步索引

分类

  • 聚簇索引
    • 叶子节点存储数据
  • 前缀索引
    • 如果索引的某个列,只包含该列值的前一部分
  • 覆盖索引
  • 全文索引
  • hash索引: innodb不支持

最左匹配原则

  • 区分度
    • 字段类型
    • 数据量更小,或者mysql认为全表扫描更快

什么情况下不使用索引

  • !=, like
  • 使用了特殊表达式,包括运算和函数

索引与null

  • is null 可以使用索引
  • 唯一索引支持多行的值都是null