Skip to content

Latest commit

 

History

History
66 lines (47 loc) · 1.76 KB

3.index.md

File metadata and controls

66 lines (47 loc) · 1.76 KB

索引

索引定义

  • 一种有序的存储结构
  • 按照单个或多个列的值进行排序
  • 对应着一个 B+树
  • 提升搜索效率

使用索引的场景

  • where
  • group by
  • order by

不需使用索引的场景

  • 没有 where/group by/order by
  • 区分度不高的列
  • 经常修改的列
  • 数据量少

索引失效

  • 左模糊匹配
  • 索引参与运算,使用函数、表达式运算、隐式转换
  • where or 有非索引字段
  • 不符合最左匹配原则

索引的代价

  • B+树空间
  • 维护 B+树的时间

主键索引

  • 非空唯一索引
  • 一个表只有一个主键索引,primary key 修饰或者使用第一个非空唯一索引作为主键,或者自动生成主键
  • 包含所有行信息

唯一索引

  • 索引列不能出现重复值,可以有 null 值
  • unique 修饰
  • 只包含索引信息和主键信息

覆盖索引

  • 直接通过辅助索引就能获取全部要查询的数据,无需回表查询
  • 在 select from 之间尽量列出所有需要的字段,如果字段恰好都在辅助索引 B+树中,就会使用覆盖索引

索引下推

  • 在索引的遍历过程中,对索引中包含字段先做判断,直接将不满足的数据行排除,从而减少回表的次数
  • 通过把索引过滤条件下推到存储引擎,来减少 MySQL 存储引擎访问基表的次数以及 MySQL 服务层访问存储引擎的次数