前言 索引优化这四个字说实话我认为其实挺难理解的。看到这四个字我脑门上是:???? 索引还要优化吗?调优SQL一般来说不就是看它有没有走索引,没走索引给它加上索引就好了吗? 嗯,所以你是怎么给它加索引的? 看SQL应该怎么走索引撒! 那SQL是怎么走索引的呢?又是怎么判断这条SQL会不会走索引呢? 我:…, 咱今天就来分析分析! 要是你还不了解MySQL底层的数据结构,建议你先看看MySQL数据结构 最左前缀法则 我们一般要优化的都是复杂SQL,而复杂SQL一般走的都是联合索引,说到联合索引的匹配规则,就逃不开这个:最左前缀法则 什么是最左前缀法则? 最左前缀法则即为:索引的匹配从最左边的字段开始,匹配成功才能往右继续匹配下一个字段。 不理解?没关系,我们先来看看这个联合索引:name_age_position 联合索引是以三个字段name,age,position组成,并且创建该索引时字段顺序为name、age、positon。 那么该索引就会以这样的方式排序(索引就是排好序的高效的数据结构) name字段从小到大排序 name字段的值相同时,age字段从小到大排序 age字段的值相同时,postion字段从小到大排序 如上图所示,从zhangsan18到zhangsan100是顺序的,而name都为zhangsan18的三个结点中,age又是从小到大排序,age相同时position也是从小到大排序。 请你一定要把这个数据结构牢记于心,忘了就看看 现在通过这个联合索引再来解析一下最左前缀法则:在索引匹配时,必须先能够匹配name字段(最左边的),才能继续匹配age字段(下一个), age字段匹配成功了才能匹配position字段。 为什么? 因为联合索引中的最左边字段是有序的,而第二个字段是在第一个字段相同的情况下有序,第三个字段是在第二个字段相同的情况下有序。 如果你...