mysql order by rand()性能问题和解决方案
我使用rand()命令从数据库中生成随机行而没有任何问题,但我得知随着数据库大小的增加,此rand()会导致服务器负载沉重,因此我正在寻找另一种方法,并尝试通过生成一个随机数使用php
rand()函数并将其作为id放入mysql查询中,这非常快,因为mysql知道行ID,但问题是在我的表中所有数字都不可用。例如1,2,5,9,这样的12。
如果php rand()生成数字3,4等,则查询将为空,因为没有编号为3、4等的id。
从php生成随机数的最佳方法是什么,但是它应该在该表中生成可用的no,因此必须检查table.please。
$id23=rand(1,100000000); SELECT items FROM tablea where status='0' and id='$id23' LIMIT 1
上面的查询速度很快,但有时生成的查询不在数据库中不可用。
SELECT items FROM tablea where status=0 order by rand() LIMIT 1
上面的查询太慢,导致服务器上的负载很大
回答:
首先,全部生成一个从1到MAX(id)的随机值,而不是100000000。
然后至少有几个好的解决方案:
>
不使用=
SELECT items FROM tablea where status='0' and id>'$id23' LIMIT 1
创建索引(status,id,items)
以使其成为仅索引的查询。
- 使用
=
,但如果找不到匹配项,请使用其他随机值再试一次。有时需要几次尝试,但通常只需一次尝试。本=
应该是更快,因为它可以使用的主键。而且,如果它更快,并且90%的时间可以一次尝试,那么一次以上的尝试就可以弥补另外10%的时间。取决于您的ID值中有多少空白。
以上是 mysql order by rand()性能问题和解决方案 的全部内容, 来源链接: utcz.com/qa/427404.html