在MySQL联合索引(a,b)中,当只使用a=2这样的条件查询时,MySQL的搜索路径遵循B+树的查找逻辑:MySQL会先从根节点开始查找。在您的图中,根节点包含(2,4)这个键值。当我们查找a=2的记录时:首先比较根节点中的(2,4)的第一个值2与查询条件a=2由于它们相等,且我们只关心a列,MySQL知道所有a=2的记录可能分布在:左子节点(如果存在a=2且b<4的记录)右子节点(如果存在a=2且b>=4的记录)可能包括根节点自身的(2,4)记录为了找到所有满足a=2的记录,MySQL会:检查当前节点是否包含a=2的记录(是的,根节点有(2,4))遍历左子节点,寻找所有a=2的记录(找到(2,1))遍历右子节点,继续寻找所有a=2的记录(在右子节点再次找到(2,4))MySQL不需要判断走左子节点还是右子节点,而是两边都会检查。由于我们使用的是联合索引的第一列,索引的有序性保证了所有a=2的记录在B+树中是连续存储的,MySQL只需要找到第一个a=2的记录,然后顺序扫描直到遇到a!=2的记录为止。这种方式利用了B+树的特性,使得MySQL能够高效地找到所有满足条件的记录,而不必遍历整个表。
在MySQL联合索引(a,b)中,当只使用a=2这样的条件查询时,MySQL的搜索路径遵循B+树的查找逻辑:
MySQL会先从根节点开始查找。在您的图中,根节点包含(2,4)这个键值。当我们查找a=2的记录时:
由于它们相等,且我们只关心a列,MySQL知道所有a=2的记录可能分布在:
为了找到所有满足a=2的记录,MySQL会:
MySQL不需要判断走左子节点还是右子节点,而是两边都会检查。由于我们使用的是联合索引的第一列,索引的有序性保证了所有a=2的记录在B+树中是连续存储的,MySQL只需要找到第一个a=2的记录,然后顺序扫描直到遇到a!=2的记录为止。
这种方式利用了B+树的特性,使得MySQL能够高效地找到所有满足条件的记录,而不必遍历整个表。