索引优化
索引类型可以分为两大类
聚集索引:
是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同
主键最末尾保存了内容才是这一行记录的所有内容,这种组织的数据方式就叫聚集索引
聚集索引是按照每张表的主键构造一颗B+树,同时叶子节点存放的为整张表的行记录数据,也将聚集索引的叶子节点称为数据页
聚集索引的这个特性决定了索引组织中数据也是索引的一部分
如果未定义主键,mysql取第一个唯一索引(unique)而且只含非空列(not null)作为主键,innodb使用它为聚集索引
由于实际的数据页只能按照一颗b+树进行排序,因此每张表只能有一个聚集索引
辅助索引(非聚集索引):
除了聚集索引外,其它索引都是辅助索引,也称为非聚集索引,与聚集索引的区别辅助索引的叶子节点不包含行记录的全部数据
叶子节点除了包含键值之外,每个叶子节点的索引中包含一个书签,书签用来告诉innodb存储引擎取哪里可以找到与索引相对应的行数据
如果正确使用索引:
- 重复率越低的列作为索引
- 索引列不能参与计算
- 避免再次排序
- 尽可能运用到覆盖索引进行数据的扫描,减少回表IO操作
- 范围查找问题(大于小于,区间,like),like关键字匹配“%”开头的不会使用索引
- and和or的逻辑,or两个字段必须都用了索引,该查询才会使用索引
- 最左前缀原则,对于组合索引,mysql会一直向右匹配,直到遇到范围查找就停止匹配
- 避免使用select *
- 使用连接join来代替子查询