2

これが私の質問です

SELECT file_id, file_name, file_date, file_email
FROM (SELECT *
      FROM `file`
      ORDER BY file_date DESC
     ) AS t
WHERE file_domains = ''
GROUP BY file_name
ORDER BY file_date DESC
LIMIT 0 , 100

主キーはfile_idで、インデックスはfile_nameです。約900kの記録私のローカルコンピュータでは約2秒かかりました。このクエリの最適化はありますか?前もって感謝します。

4

2 に答える 2

0

この中間クエリ:

SELECT *
FROM `file`
ORDER BY file_date DESC

日付ごとに900kのレコードと注文を取得しますが、時間がかかる場合があります。

于 2012-09-25T18:52:04.223 に答える
0

クエリはMySQLの非標準の「機能」(間違い:1つの非標準機能と1つの準標準機能)を使用しており、オプティマイザが十分に賢い場合、MySQLの将来のバージョンで壊れないという保証はありません。サブクエリが冗長であることを理解してください。

にインデックスを追加して、(file_domains, file_name, file_date)このバージョンを試してください。

SELECT f.file_id, f.file_name, f.file_date, f.file_email
FROM 
   `file` AS f
  JOIN
    ( SELECT file_name
          ,  MAX(file_date) AS max_file_date
      FROM `file`
      WHERE file_domains = ''
      GROUP BY file_name
      ORDER BY max_file_date DESC
      LIMIT 0 , 100
     ) AS fm
  ON  fm.file_name = f.file_name
  AND fm.max_file_date = f.file_date
ORDER BY f.file_date DESC ;
于 2012-09-25T19:03:35.987 に答える