MySql性能调优四(最左前缀原则)

前言

MySql性能调优写到第四篇了,关于索引的调优终于到了重点。本篇将着重观察索引的触发条件与执行计划。
所谓最左前缀原则,顾名思义,就是在复合索引中从最左列使用索引。
MySql一次查询只能使用一个索引,如果针对多列条件查询,请建复合索引。
MySql一张表最多有16个索引,一个复合索引最多有16列,索引长度最大为256个字节。

最左前缀

当查询条件精确匹配左边连续一个或多个列时,索引可以被使用,但只能使用一部分。索引的许多规则并不需要死记硬背,结合之前学习的索引数据结构即可理解。

表与索引

MySql性能调优四(最左前缀原则)_第1张图片
表.png
MySql性能调优四(最左前缀原则)_第2张图片
索引.png

索引顺序依次为name,type,price。

全列匹配

全列匹配.png

理论上索引对顺序是敏感的,但mysql会自动优化where后条件的位置,例如颠倒位置:

颠倒位置.png

查询没有使用第一列

MySql性能调优四(最左前缀原则)_第3张图片
查询没有使用第一列.png

索引中间某个列未提供

这种情况索引只能使用一部分,如果中间未提供的列的列值比较少(如:性别),可以通过填坑的手段使索引用全。
例:查询age=18,name=张三的学生,其中索引顺序为 name,sex,age。
select * from student where name = '张三' and sex in ('man','girl') and age = 18

模糊查询

MySql性能调优四(最左前缀原则)_第4张图片
模糊查询.png

通配符放在前面无法匹配索引。

范围查询

范围查询列可以使用索引(前提必须满足最左前缀),范围列后面的列无法使用索引。同时,索引最多作用于一个范围列。

查询条件含有函数或表达式

MySql性能调优四(最左前缀原则)_第5张图片
含有函数.png
MySql性能调优四(最左前缀原则)_第6张图片
含有表达式.png

应避免表达式或函数出现在查询条件中。

何时建立索引

  1. 索引虽然会增加查询效率,但对增删改的效率有影响(要维护B+Tree),所以表记录较少,不建议建立索引。
  2. 索引的选择性过低,不建议建立索引。所谓选择性,即不重复的索引列值/表记录数。

你可能感兴趣的:(MySql性能调优四(最左前缀原则))