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

This intermediate query:

SELECT *
FROM `file`
ORDER BY file_date DESC

Fetches 900k records and orders by date, that might be slow.

于 2012-09-25T18:52:04.223 回答
0

您的查询使用 MySQL 的非标准“功能”(错误:一项非标准和一项半标准功能),并且不能保证它不会在 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 回答