多列上的索引用法

时间:2015-01-24 16:39:55

标签: mysql indexing

我有一张桌子,里面有2.5亿条记录,记录住在美国及其国家,县和定居点的人。简化版本如下:

mysql

我在姓氏,地区,次区域和地方放了综合索引。以下查询在完全相同的时间执行:

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在这种情况下如何在多列上使用索引吗?

1 个答案:

答案 0 :(得分:1)

如果没有看到EXPLAIN输出,很难说明查询执行计划的具体细节。

但有两件事情跳出来了:

  1. 两个查询都必须考虑表中的所有行(您没有WHERE子句)。
  2. 通过基于surname作为该索引的前导列扫描复合索引,可以满足两个查询。因为您正在计算项目,所以必须进行紧密而非松散的索引扫描。 (你可以阅读这些内容。)
  3. 因此他们可能都有相同的执行计划。