目前,我在PHP脚本中使用此查询:
SELECT * FROM `ebooks` WHERE `id`!=$ebook[id] ORDER BY RAND() LIMIT 125;
数据库最多会有大约2500行,但我已经读过ORDER BY RAND()
最终会减慢处理时间,因为数据库中的数据会增长。
所以我正在为我的查询寻找一种替代方法,使事情仍能顺利进行。
另外,我注意到ORDER BY RAND()
并不是真正随机化行,因为我经常看到它遵循某种模式,有时会反复重复。
有没有任何方法可以真正随机化行?
答案 0 :(得分:1)
RAND()
函数是一个伪随机数生成器,如果你不用不同的值初始化它会给你相同的数字序列,所以你应该做的是:
SELECT * FROM `ebooks` WHERE `id`!=$ebook[id] ORDER BY RAND(UNIX_TIMESTAMP()) LIMIT 125;
将从当前时间播种随机数生成器,并为您提供不同的数字序列。
RAND()
会减慢SELECT
的{{1}}子句,因为它必须每次生成一个随机数,然后按它排序。我建议您将数据返回给调用程序,并使用类似array_rand
的内容将其随机化。
答案 1 :(得分:1)