MySQL流言之联合索引顺序问题

几个月前与两位同事聊天聊到MySQL索引,当时我提出了一个问题,大致内容如下:

假设有一个user表,其内部有两个字段agecountry组成联合索引index(age, country)。在执行SQL查询时筛选条件与联合索引顺序颠倒是否会命中索引,即select * from user where country=? and age=?

聊天之后,我后来在面试时常常问候选人类似的问题,发现大多数人都回答不了。

这个问题其实很简单,抛开答案不谈,这种问题按照常理分析即可。

MySQL作为成熟且优秀的数据库软件,它肯定可以识别索引的顺序问题并在SQL解析时纠正顺序,推心置腹的讲,如果我是SQL解析器的开发者,也会顺手纠正这种索引顺序问题,必然不会傻乎乎按照用户指定的where条件一个个执行筛选。

其实这个问题也属于上古流言,即很多年前旧版本的MySQL可能存在这个问题,但是现代版本的MySQL早已解决了它。然而多数开发者总是勤于阅读旧资料,而惰于推敲考证。