1

我有一个查询在一个有一百万行的表上运行。我在列 (wafer_name, date) 上有一个名为wafer_name_date 的复合索引。通过添加索引,此查询现在需要 0.06 秒,但仍使用临时表和文件排序进行报告。有没有办法避免这种情况?谢谢!

EXPLAIN SELECT DISTINCT wafer_name FROM flash ORDER BY date\G 
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: flash
         type: range
possible_keys: NULL
          key: wafer_name_date
      key_len: 767
          ref: NULL
         rows: 4308
        Extra: Using index for group-by; Using temporary; Using filesort
4

1 回答 1

2

您的查询有点尴尬,因为结果集中不包含“日期”。但是,您是按日期订购的。我希望是这样的:

select wafer_name, min(date)
from flash
group by wafe_name
order by min(date)

正如解释所说,执行计划使用分组(不同)值的索引。这会为wafer_name 生成一个值,并为date 生成一个任意值。它从索引中提取任意日期(而不是在相应页面上查找)。

但是,它需要按日期对结果进行排序。它不能使用您定义的索引,因为这是首先按晶片名称,并且每个晶片名称只有一个日期。所以它保存数据并进行排序。

我想不出办法解决这个问题。

于 2012-08-14T18:22:22.547 回答