我有一张桌子,里面有2.5亿条记录,记录住在美国及其国家,县和定居点的人。简化版本如下:
我在姓氏,地区,次区域和地方放了综合索引。以下查询在完全相同的时间执行:
SELECT SQL_NO_CACHE surname, place, count(*) as cnt FROM `ustest` group by place, surname;
SELECT SQL_NO_CACHE surname, region, count(*) as cnt FROM `ustest` group by region, surname;
我的印象是第一个查询不会使用索引,因为我认为要使用索引从左到右查询所有列。
有人可以解释MySQL在这种情况下如何在多列上使用索引吗?
答案 0 :(得分:1)
如果没有看到EXPLAIN
输出,很难说明查询执行计划的具体细节。
但有两件事情跳出来了:
WHERE
子句)。surname
作为该索引的前导列扫描复合索引,可以满足两个查询。因为您正在计算项目,所以必须进行紧密而非松散的索引扫描。 (你可以阅读这些内容。)因此他们可能都有相同的执行计划。