当前位置: 首页 > 面试题库 >

mysql order by rand()性能问题和解决方案

印瑾瑜
2023-03-14
问题内容

我使用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。

然后至少有几个好的解决方案:

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

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

  1. 使用=,但如果找不到匹配项,请使用其他随机值再试一次。有时需要几次尝试,但通常只需一次尝试。本=应该是更快,因为它可以使用的主键。而且,如果它更快,并且90%的时间可以一次尝试,那么一次以上的尝试就可以弥补另外10%的时间。取决于您的ID值中有多少空白。


 类似资料:
  • 大部分软件都可以通过付出相对较小的努力,让他们比刚发布时快上10到100倍。在市场的压力下,选择一个简单而快速的解决问题的方法是比选择其它方法更为明智而有效率的选择。然而,性能是可用性的一部分,而且通常它也需要被更仔细地考虑。 提高一个非常复杂的系统的性能的关键是,充分分析它,来发现其“瓶颈”,或者其资源耗费的地方。优化一个只占用1%执行时间的函数是没有多大意义的。一个简要的原则是,你在做任何事情

  • 问题内容: 我一直在阅读,发现使用LIKE会导致查询速度大大降低。 同事推荐我们使用 替代 现在我不是SQL专家,并且我不太了解这些语句的内部工作原理。这是一个更好的选择,值得在每个like语句中键入一些额外的字符吗?是否有更好(更容易键入)的替代方法? 问题答案: 有几个性能问题需要解决… 如果可能,不要多次访问同一张表 不要将子查询用于无需参考同一表的其他副本即可完成的条件。如果由于使用聚合函

  • 本文向大家介绍Nginx tp3.2.3 404问题解决方案,包括了Nginx tp3.2.3 404问题解决方案的使用技巧和注意事项,需要的朋友参考一下 最近我把Apache给换成nginx,当我把tp项目搬过去运行的时候发现404 错误 ,原来是因为nginx不支持 pathinfo 模式,需要自己配置 下面我配置 在server配置里面 保存配置之后,重启 nginx ,配置成功 直接支持类

  • 解决方案常见问题 Windows Needing to re-target the Windows SDK XCode XCode PNG Compression issue It is possible that your PNG images contain incorrect color profiles. You can convert color profiles using Image

  • 我们已经探索了 Python 语言中的许多部分,现在我们将通过设计并编写一款程序来了解如何把这些部分组合到一起。这些程序一定是能做到一些有用的事情。这其中的方法就是去学习如何靠你自己来编写一份 Python 脚本。 问题 我们希望解决的问题如下: 我想要一款程序来备份我所有的重要文件。 虽然这是一个简单的问题,但是其中并没有足够的信息有助于让我们开始规划一份解决方案。我们需要进行一些分析(Anal

  • 学习理解运行的程序的性能问题与学习 debug 是一样不可避免的。即使你完美、精确地理解了你的代码运行时所产生的开销,你的代码也会调用其他你几乎不能控制的或者几乎不可看透的软件系统。然而,实际上,通常性能问题和调试有点不一样,而且往往要更简单些。 假如你或你的客户认为你的一个系统或子系统运行太慢了。在你把它变快之前,你必须构建一个它为什么慢的思维模型。为了做到这个,你可以使用一个图表工具或者一个好