mysql Group by:慢查询

时间:2012-09-25 18:48:34

标签: mysql group-by

这是我的查询

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秒钟。 这个查询有优化吗? 提前谢谢。

2 个答案:

答案 0 :(得分:0)

此中间查询:

SELECT *
FROM `file`
ORDER BY file_date DESC

按日期获取900k记录和订单,这可能会很慢。

答案 1 :(得分: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 ;