这是我的查询
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秒钟。 这个查询有优化吗? 提前谢谢。
答案 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 ;