美文网首页我爱编程
MySql性能调优四(最左前缀原则)

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

作者: 苑苑苑爱学习 | 来源:发表于2018-04-09 10:55 被阅读0次

    前言

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

    最左前缀

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

    表与索引

    表.png 索引.png

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

    全列匹配

    全列匹配.png

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

    颠倒位置.png

    查询没有使用第一列

    查询没有使用第一列.png

    索引中间某个列未提供

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

    模糊查询

    模糊查询.png

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

    范围查询

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

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

    含有函数.png 含有表达式.png

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

    何时建立索引

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

    相关文章

      网友评论

        本文标题:MySql性能调优四(最左前缀原则)

        本文链接:https://www.haomeiwen.com/subject/kiwbhftx.html