骄傲的赛亚人

索引优化

索引类型可以分为两大类

聚集索引:

是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同

主键最末尾保存了内容才是这一行记录的所有内容,这种组织的数据方式就叫聚集索引

聚集索引是按照每张表的主键构造一颗B+树,同时叶子节点存放的为整张表的行记录数据,也将聚集索引的叶子节点称为数据页
聚集索引的这个特性决定了索引组织中数据也是索引的一部分
如果未定义主键,mysql取第一个唯一索引(unique)而且只含非空列(not null)作为主键,innodb使用它为聚集索引
由于实际的数据页只能按照一颗b+树进行排序,因此每张表只能有一个聚集索引

辅助索引(非聚集索引):

除了聚集索引外,其它索引都是辅助索引,也称为非聚集索引,与聚集索引的区别辅助索引的叶子节点不包含行记录的全部数据
叶子节点除了包含键值之外,每个叶子节点的索引中包含一个书签,书签用来告诉innodb存储引擎取哪里可以找到与索引相对应的行数据

如果正确使用索引:

  • 重复率越低的列作为索引
  • 索引列不能参与计算
  • 避免再次排序
  • 尽可能运用到覆盖索引进行数据的扫描,减少回表IO操作
  • 范围查找问题(大于小于,区间,like),like关键字匹配“%”开头的不会使用索引
  • and和or的逻辑,or两个字段必须都用了索引,该查询才会使用索引
  • 最左前缀原则,对于组合索引,mysql会一直向右匹配,直到遇到范围查找就停止匹配
  • 避免使用select *
  • 使用连接join来代替子查询

posted on 2022-03-13 13:56  骄傲的赛亚人  阅读(79)  评论(0编辑  收藏  举报

导航