mysql 索引优化

前言

在根据执行计划对SQL进行分析之后,逐步的去优化每个子查询的索引以及成本使用情况,执行计划我的理解就是用来对索引进行逐步的优化的一个过程。让每个查询都尽量使用索引,在索引过程中,索引会经常性失效。

口诀

全值匹配我最爱,最左前缀要遵守
带头大哥不能死,中间兄弟不能断
索引列上少计算,范围之后全失效
LIKE符号写最后,覆盖索引不写*
不等空值还是OR,索引失效要少用
var引号不能丢,SQL高级也不难
分组之前必排序,一定要上索引啊

建立索引注意事项

  • 单值索引,尽量选择过滤性更好的字段。【eg: 性别字段,过滤比例为50%,不建议建索引】
  • 组合索引,索引字段的顺序可以按照识别度进行排序,识别度越高,放在越靠前
  • 组合索引,尽量包含where语句中的更多字段
  • 尽可能的根据分析执行计划,统计信息,去调整query的写法达到适合索引的目的

索引容易失效的几个点

  • 不在索引列上做任何操作【计算,函数,类型转换】,无法使用索引,会全表扫描
  • 组合索引中,如果中间某个字段使用了范围条件,则右边的索引列失效
  • 尽量使用覆盖索引【索引列和查询列一致,即数据直接在索引表中就可以获取】
  • mysql 在使用不等于*(!= or <>)的时候,无法使用索引,会全表扫描
  • is null , is not null 也无法使用索引,故建表时要有默认值
  • like 通配符必须放在索引列的右边,否则索引失效,会全表扫描
  • 字符串不加单引号,索引会失效
  • 少用or , 用它连接索引会失效
posted @ 2019-09-11 11:56  大步向前blue  阅读(198)  评论(0编辑  收藏  举报