Mysql索引相关优化

Mysql优化

 

 Mysql优化涉及到索引,我理解的索引就是一种数据结构,mysql中常用的数据结构有Hash索引,B+树索引结构,

Hash索引,它的有点在于时间复杂度读O(1),但是它有其缺点,不能进行范围查找操作,

  B+树数据结构,它没有红黑树树高高,针对覆盖索引,子叶节点存放行数据,非覆盖索引子叶节点存放的是主键索引位置信息,需要回表查询数据

关于创建角度

  1. 创建最好采用覆盖索引,这样可以直接获取行数据不需要进行回表查询,可以采用EXPLAIN命令执行sql,Extra字段是using index condition 说明使用的是覆盖所有
  2. 其次,mysql存储是在磁盘中,磁盘存放是无序的,IO消耗是很严重的,索引我们可以打开Mrr设置,目的是让在回表查询之前将id缓存起来进行排序,减少IO消耗。

关于索引失效

  1. 是否使用函数,例如String 存放id内部进行隐式转化cast()导致所有失效
  2. 多张表编码是否一致
  3. 是否遵循复合索引的最左原则
  4. like 以%开头,索引无效;当like前缀没有%,后缀有%时,索引有效
  5. or语句前后没有同时使用索引。当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效
  6. 在索引列上使用 IS NULL 或 IS NOT NULL操作。索引是不索引空值的,所以这样的操作不能使用索引,可以用其他的办法处理,例如:数字类型,判断大于0,字符串类型设置一个默认值,判断是否等于默认值即可。
  7. 在索引字段上使用not,<>,!=。不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。 优化方法: key<>0 改为 key>0 or key<0

索引使用不上

可以临时采用强制索引,force index

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章