重点:mysql的最左匹配原则其实是和where后面的查询条件顺序是没有关系的只和索引的字段顺序有关;(这里说的顺序是联合索引的顺序) 这点网上很多地方都说错了
下面我们来用代码模拟一下问题 这里我们创建一个test01表 表中有 abc 三列的复合索引
CREATE TABLE `test01` ( `id` bigint(25) NOT NULL, `a` bigint(255) DEFAULT NULL, `b` bigint(255) DEFAULT NULL, `c` bigint(255) DEFAULT NULL, `d` bigint(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `abc` (`a`,`b`,`c`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
按照联合索引的顺序查询结果,可以看到是走了索引的。
不按照联合索引顺序查询 ,也是走索引的
总结:通过以上的测试可以看到,对于联合索引,查询时 如果走的是回表查询 走不走索引是和where后面的 字段顺序没有关系的只和联合索引的顺序有关; 查询时如果时 覆盖索引 查询,走不走索引就和任何顺序没有任何关系了。