什么是最左前缀原则/最左匹配原则?

注意:最左前缀原则、最左匹配原则、最左前缀匹配原则这三个术语是指同一个概念。

最左匹配原则:在 InnoDB 的联合索引中,查询时只有当匹配到前一个/左边的列值后,才能继续匹配下一个列值。

根据最左匹配原则,我们创建了一个组合索引,例如 (a1, a2, a3),实际上相当于创建了三个索引:(a1)、(a1, a2) 和 (a1, a2, a3)。

为什么必须从最左边开始匹配,否则就无法匹配成功呢?

举个例子,假设有一个名为 "user" 的表,我们为 "name" 和 "age" 创建了一个组合索引。

ALTER TABLE user ADD INDEX comidx_name_age (name, age);

组合索引在 B+ 树中是一种复合的数据结构,它按照从左到右的顺序构建搜索树("name" 在左边,"age" 在右边)。

从图中可以看出,"name" 是有序的,而 "age" 是无序的。当 "name" 相同时,才会按照 "age" 进行排序。

当我们使用 WHERE name = '张三' AND age = 20 进行查询时,B+ 树会优先比较 "name" 来确定下一步应该搜索的方向,是向左还是向右。只有在 "name" 相同时才会比较 "age"。但是,如果查询条件中没有 "name",就无法确定下一步应该搜索哪个节点,因为在构建搜索树时,"name" 是第一个比较因子。因此,如果没有使用 "name",索引就无法发挥作用。

标签: java, Java面试题, MySQL, Java问题合集, MySQL面试题, Java编程, Java问题精选, Java常见问题