php rand 执行时间,关于php:ORDER BY RAND()函数需要很长时间才能在mysql中执行

本问题已经有最佳答案,请猛点这里访问。

我必须在MYSQL query中使用RAND函数。 如果我在sql查询中使用此功能,则大约需要0.7962秒。 但是,如果我不使用它,则可以在0.0009秒内正常工作。 如何使用RAND函数使sql查询更快。

我的查询

SELECT

posts.ID,

posts.post_content,

posts.post_title,

posts.post_date,

posts.post_name

FROM posts

WHERE posts.post_type = 'post'

AND posts.post_status = 'publish'

ORDER BY RAND() LIMIT 0, 24

看到这篇文章explaitextended.com/2009/03/01/selecting-random-rows

您是否在"冷"服务器上计时不带ORDER BY的查询? 0.0009秒听起来像是从缓存中获取结果。

看到这个链接:

http://jan.kneschke.de/projects/mysql/order-by-rand/

对于大多数一般情况,这是您的操作方法:

SELECT name

FROM random AS r1 JOIN

(SELECT CEIL(RAND() *

(SELECT MAX(id)

FROM random)) AS id)

AS r2

WHERE r1.id >= r2.id

ORDER BY r1.id ASC

LIMIT 1

这假定id的分布是相等的,并且id列表中可能存在间隙。请参阅文章以获取更多高级示例

我去解决。

SELECT p1.ID, p1.post_content, p1.post_title, p1.post_date, p1.post_name

FROM posts as p1 JOIN

(SELECT CEIL(RAND() *

(SELECT MAX(ID)

FROM posts)) AS id)

AS p2

WHERE p1.ID >= p2.id

ORDER BY p1.ID ASC

LIMIT 0, 24

这比我的查询要快。

MySQL快速从60万行中选择10条随机行

这是解决方案。

谢谢

这非常慢,因为您要为表中的每一行分配一个随机值,然后对整个表进行排序,然后将其中的大部分丢弃。您会变得更好:

检索所有帖子ID;

在php中随机选择25个;

在数据库中查询那些行。

这将以线性时间运行;现在是O(n log n)。

这是迄今为止我所见过的最好的解决方案,它可以实现ID的不均匀分配。如果您的ID是连续的(换句话说,如果您永远不会删除任何行),则可以更快地执行此操作。

rand()有一些性能"问题"-这里讨论了一些建议:如何优化MySQLs ORDER BY RAND()函数?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值