mysql 返回随机行_从mysql数据库返回随机行而不使用rand()

我希望能够从数据库中取回15条左右的记录。我已经看到,使用WHERE id = rand()会导致性能问题,因为我的数据库变得更大。我所见过的所有解决方案都适用于选择一个随机记录。我想获得倍数。从mysql数据库返回随机行而不使用rand()

有谁知道有效的方法来做到这一点的大型数据库?

编辑:

进一步编辑和测试:

我使用的MyISAM做了一个非常简单的表格,一个新的数据库上。我给了这3个字段:autokey(无符号自动数字键)bigdata(一个大的斑点)和somemore(一个中等的int)。 然后,我将随机数据应用到表中,并使用Navicat运行一系列查询。下面是结果:

Query 1: select * from test order by rand() limit 15

Query 2: select *

from

test

join

(select round(rand()*(select max(autokey) from test)) as val from test limit 15) as rnd

on

rnd.val=test.autokey;`

(我试过两个选择,选择不同的和它并没有明显的差异)

和:

Query 3 (I only ran this on the second test):

SELECT *

FROM (

SELECT @cnt := COUNT(*) + 1,

@lim := 10

FROM test

) vars

STRAIGHT_JOIN

(

SELECT r.*,

@lim := @lim - 1

FROM test r

WHERE (@cnt := @cnt - 1)

AND RAND(20090301) < @lim/@cnt

) i

ROWS: QUERY 1: QUERY 2: QUERY 3:

2,060,922 2.977s 0.002s N/A

3,043,406 5.334s 0.001s 1.260

我想要做更多的行,所以我可以看到查询3是如何缩放的,但是在这个时候电话,它似乎好像清晰的赢家是查询2。

我之前包裹了这个测试,并宣布一个答案,而我拥有所有这些数据和测试环境的搭建,任何人都可以提出任何进一步的测试?

+0

这些可能会有所帮助:http://stackoverflow.com/questions/142242/what-是最好的方式来挑选一个随机排从一个表在MySQL中,http://stackoverflow.com/questions/1244555/how-can-i-optimize-mysqls- order-by-rand-function,http://stackoverflow.com/questions/1868102/order-by-rand-alternative –

2010-08-03 15:12:06

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值