我有两张 table ;
- 网页 - 包含多个网站的网址和名称的表格
- 访问 - 包含访问时间、客户端 IP 以及访问网站的 URL 的表格
我需要掌握对任何给定网页的最后 X(假设 10)次访问,这是 ip 和 url 的独特组合。因此,如果用户多次连接到一个页面,则只能将其列为一行(假设是最新的一行)。
我有一个查询可以得到我需要的结果,但它非常慢。为了获得最后 10 次唯一访问,大约需要 45 秒。
这是查询;
select ma.access_date, mp.name
from access ma, webpages mp
where ma.url = mp.url
and ma.id = (select max(id)
from access ma2
where ma2.client_id = ma.client_id
and ma2.url = ma.url)
order by ma.id desc
limit 10;
我该如何优化这个?我的查询是否存在缺陷,或者我完全走错了路?
最佳答案
通过移动(相关的)子查询,您可以显着减少要读取的数据:
SELECT
a.access_date,
w.name
FROM
(SELECT
client_id,
url,
MAX(id) id
FROM
access
GROUP BY
client_id, url
ORDER BY id DESC
LIMIT 10
) s
JOIN
access a
USING (client_id, url, id)
JOIN
webpages w
USING (url)
关于mysql - 从另一个获取最后的独特值(value)和附加信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26056088/