gpt4 book ai didi

按日期排序时,MySQL 数据库使用 "Using where; Using temporary; Using filesort"

转载 作者:行者123 更新时间:2023-11-29 00:54:27 26 4
gpt4 key购买 nike

我有一个包含大量记录的数据库,当我使用以下 SQL 加载页面时,速度非常慢。

SELECT goal.title, max(updates.date_updated) as update_sort 
FROM `goal`
LEFT OUTER JOIN `update` `updates` ON (`updates`.`goal_id`=`goal`.`goal_id`)
WHERE (goal.private=0)
GROUP BY updates.goal_id
ORDER BY update_sort desc
LIMIT 12

当我进行解释时,它说它不使用任何键并且它搜索每一行。还告诉我它使用“使用哪里;使用临时的;使用文件排序”。

非常感谢任何帮助

谢谢


它需要按 goal_id 分组,因为 select 中的 MAX() 只返回一行。

我想做的是从 updates 表中为每个目标返回 MAX date_updated 行,然后按该列对其进行排序。


当前索引在 goal.private 和 update.goal_id 上


EXPLAIN 的输出(无法上传图片所以必须把它放在这里抱歉,如果不清楚:

id  select_type     table   type    possible_keys   key         key_len     ref           rows  Extra
1 SIMPLE goal ref private private 1 const 27 Using temporary; Using filesort
1 SIMPLE updates ref goal_id goal_id 4 goal.goal_id 1

最佳答案

SELECT  u.date_updated, g.title
FROM updates u
JOIN goal g
ON g.goal_id = u.goal_id
WHERE u.id =
(
SELECT ui.id
FROM updates ui
WHERE ui.goal_id = u.goal_id
ORDER BY
ui.goal_id, ui.date_updated, ui.id
LIMIT 1
)
AND g.private = 0
ORDER BY
u.date_update, u.id
LIMIT 12

updates 上创建两个索引以便查询快速运行:

updates (goal_id, date_updated, id)
updates (date_updated, id)

关于按日期排序时,MySQL 数据库使用 "Using where; Using temporary; Using filesort",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6787147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com