今天朋友抛了一个群里的讨论给我,如下图
这题我选择了A,B,因为我认为A和B都不满足最左;最后朋友实际建表的测试结果如下(也就是说答案应该是A,B,D)
按理说不等于不走索引应该是SQL优化的常识了,为什么我在选择的时候排除了D呢?因为2个月前我遇到了这样一个语句
SELECT MAX(id)
FROM a
WHERE user_id != '18'
AND '2019-02-13 00:00:00' >= create_time
GROUP BY user_id;
因为这个语句的关系,我一度认为在5.7.25版本里不等于也已经开始智能的走索引了;经过这个选择题,决定仔细探索一下MySQL的不等于
对原语句进行不同的改写
备注:
①索引idx_uid_ct为user_id和create_time的联合索引idx_uid_ct(user_id,create_time)
②后面为了测试,特意删除了idx