我在一个有五十万行的表上运行查询。我在列上有一个名为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
答案 0 :(得分:2)
您的查询有点尴尬,因为“日期”不包含在结果集中。然而,你按日期订购。我希望有类似的东西:
select wafer_name, min(date)
from flash
group by wafe_name
order by min(date)
正如解释所说,执行计划使用索引进行分组(不同)值。这会为wafer_name生成一个值,并为date生成任意值。它从索引中提取任意日期(而不是在相应的页面上查找)。
然而,它需要按日期对结果进行排序。它不能使用您定义的索引,因为这首先是wafer_name,而每个wafer_name只有一个日期。因此它会保存数据并进行排序。
我想不出办法解决这个问题。