gpt4 book ai didi

mysql - 在 MySQL 中使用 Join 比仅使用 Rand() 更快

转载 作者:行者123 更新时间:2023-11-29 01:24:50 25 4
gpt4 key购买 nike

怎么样

SELECT t.id 
FROM table t
JOIN (SELECT(FLOOR(max(id) * rand())) AS maxid FROM table)
AS tt
ON t.id >= tt.maxid
LIMIT 1

SELECT * FROM `table` ORDER BY RAND() LIMIT 1

我实际上很难理解第一个。也许如果我知道为什么一个比另一个更快,我会有更好的理解。

*原帖@Difficult MySQL self-join please explain

最佳答案

您可以在查询上使用 EXPLAIN,但基本上:

首先,您将根据(我假设)索引字段的最大值获得一个随机数(这不是很慢)。这非常快,我想说甚至可能接近恒定时间(取决于索引哈希的实现?)

然后,您将加入该数字并仅返回大于该数字的第一行,并且因为您再次使用索引,所以速度快如闪电。

第二个是通过一些随机函数排序。这是必须的,但是您需要查看解释,进行全表扫描,然后返回第一个。这当然非常昂贵。由于该兰特,您没有使用任何索引。

(解释将如下所示,表明您没有使用 key )

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1 SIMPLE table ALL NULL NULL NULL NULL 14 Using temporary; Using filesort

关于mysql - 在 MySQL 中使用 Join 比仅使用 Rand() 更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4733036/

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