gpt4 book ai didi

mysql - 如何加快 MySQL 表连接

转载 作者:行者123 更新时间:2023-11-28 23:24:07 26 4
gpt4 key购买 nike

我有两个表,一个包含一些用户详细信息,另一个包含用户请求的运行日志,包括时间戳和位置列。它们都共享一个公共(public)的 user_id 列。

我基本上是在尝试检索所有用户信息的列表,其中包括他们的最新位置和时间戳。

这就是我目前实现这一目标的方式,而且它确实有效 - 但是这个查询平均花费 超过 2 秒

SELECT u.*, o.time, o.location 
FROM users u
LEFT JOIN
(SELECT DISTINCT user_id,
time,
location
FROM onlineStatus o
WHERE time = (select MAX(time)
FROM onlineStatus
WHERE user_id = o.user_id)
) AS o
ON o.user_id = u.user_id
WHERE user_type = "1"
AND user_enabled = "0"
AND user_realm = ?
GROUP BY u.user_id

当我需要在不同的 user_type 上运行多个迭代时,这是令人沮丧的。我不完全确定如何加快速度,我们将不胜感激。谢谢。

最佳答案

您可以根据两个表的大小重写该查询并使其更快,但是您应该引入新表并在插入 onlineStatus 表时更新它,然后将该表与用户表连接:

创建表 onlineStatusLast ( user_id int unsigned not null 主键, last_time 时间戳, 位置变量 (100), KEY last_time(last_time));

INSERT INTO onlineStatusLast (user_id, location, last_time) 
values (1, 'Canada', now())
on duplicate key update last_time=NOW(), locaton='Canada';

填充表格

INSERT INTO onlineStatusLast (user_id, last_time) 
select user_id, MAX(time) FROM onlineStatus group by user_id

您的查询将变成这样:

SELECT u.*, o.last_time, o.location 
FROM users u
LEFT JOIN onlineStatusLast o
AS o ON o.user_id = u.user_id
WHERE user_type = "1"
AND user_enabled = "0"
AND user_realm = ?

关于mysql - 如何加快 MySQL 表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40162415/

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