gpt4 book ai didi

php - mysql order by rand() 性能问题及解决方案

转载 作者:行者123 更新时间:2023-11-30 00:13:23 28 4
gpt4 key购买 nike

我使用 order by rand() 从数据库生成随机行,没有任何问题,但我意识到,随着数据库大小的增加,此 rand() 会导致服务器负载过重,所以我正在寻找替代方案,并尝试通过生成使用 php rand() 函数生成一个随机数,并将其作为 id 放入 mysql 查询中,速度非常快,因为 mysql 知道行 id但问题是在我的表中所有数字都不可用。例如 1,2,5,9,12 之类的。

如果 php rand() 生成数字 3,4 等,则查询将为空白,因为没有数字 3、4 等的 id。

从 php 生成随机数的最佳方法是什么,但它应该在该表中生成可用的否,因此它必须检查该表。请建议。

$id23=rand(1,100000000);
SELECT items FROM tablea where status='0' and id='$id23' LIMIT 1

上面的查询速度很快,但有时会生成数据库中不可用的“no”。

    SELECT items FROM tablea where status=0 order by rand() LIMIT 1

上面的查询太慢并且导致服务器负载过重

最佳答案

首先,全部生成一个从 1 到 MAX(id) 的随机值,而不是 100000000。

那么至少有几个好的解决方案:

  1. 使用>而不是=

    SELECT items FROM tablea where status='0' and id>'$id23' LIMIT 1

    (status,id,items)上创建索引,使其成为仅索引查询。

  2. 使用=,但如果未找到匹配项,请使用不同的随机值重试。有时需要多次尝试,但通常只需要一次尝试。 = 应该更快,因为它可以使用主键。如果速度更快,并且 90% 的情况下一次尝试即可获得结果,那么当需要多次尝试时,这可以弥补另外 10% 的时间。取决于你的 id 值有多少差距。

关于php - mysql order by rand() 性能问题及解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23866533/

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