1

50 万行のテーブルでクエリを実行しています。列 (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に任意の値が生成されます。(対応するページで検索するのではなく)インデックスから任意の日付を取得しています。

ただし、結果を日付で並べ替える必要があります。これは最初にwafer_nameによるものであり、wafer_nameごとに1つの日付しかないため、定義したインデックスを使用できません。したがって、データを保存して並べ替えを行います。

これを回避する方法は考えられません。

于 2012-08-14T18:22:22.547 に答える