MySQL SELECT DISTINCT ... ORDER BY没有临时表或filesort

时间:2012-08-14 16:30:56

标签: mysql database

我在一个有五十万行的表上运行查询。我在列上有一个名为wafer_name_date的复合索引(wafer_name,date)。通过添加索引,此查询现在需要.06秒,但仍使用临时表和filesort进行报告。有什么方法可以避免这种情况吗?谢谢!

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

1 个答案:

答案 0 :(得分:2)

您的查询有点尴尬,因为“日期”不包含在结果集中。然而,你按日期订购。我希望有类似的东西:

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

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

然而,它需要按日期对结果进行排序。它不能使用您定义的索引,因为这首先是wafer_name,而每个wafer_name只有一个日期。因此它会保存数据并进行排序。

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