gpt4 book ai didi

php - "group by"的替代方法以避免低性能速度?

转载 作者:行者123 更新时间:2023-11-30 22:05:15 26 4
gpt4 key购买 nike

我想按 b.hash 分组,但是这样做成本太高。有什么方法既可以进行此查询又可以进行分组但速度更快吗?

SELECT STRAIGHT_JOIN b.hash, b.page, n.favorite
FROM behaviour b, new_table n
WHERE b.timestamp >= NOW( ) - INTERVAL 20 SECOND
AND b.hash = n.hash

这是EXPLAIN

enter image description here

分析

enter image description here

最佳答案

我猜你想要这个查询

SELECT b.hash, b.page, n.favorite
FROM behaviour b
JOIN new_table n ON b.hash = n.hash
WHERE b.timestamp >= NOW( ) - INTERVAL 20 SECOND
AND b.hash = n.hash
ORDER BY b.hash

我不明白你在问题中对 GROUP BY 的评论。您似乎想要最近三分之一分钟的项目。

无论如何,如果您在包含以下列的behaviour 表上创建复合索引,您的查询可能会以可接受的速度开始运行。

 (timestamp, hash, page)

为什么? MySQL 的查询规划器可以随机访问索引以从查询中的 timestamp 值开始。这是 O(log n) 快。然后它可以按顺序扫描索引以获取查询所需的信息。这几乎是瞬间的。

你可能想要这个吗?

SELECT b.hash, b.page, MAX(n.favorite)
FROM behaviour b
JOIN new_table n ON b.hash = n.hash
WHERE b.timestamp >= NOW( ) - INTERVAL 20 SECOND
AND b.hash = n.hash
GROUP BY b.hash, b.page

还是这个?

SELECT b.hash, b.page, GROUP_CONCAT(n.favorite)
FROM ...

关于php - "group by"的替代方法以避免低性能速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42002761/

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