mysql如何选择随机行_如何在MySQL中有效地选择随机记录?

MysqL> EXPLAIN SELECT * FROM urls ORDER BY RAND() LIMIT 1;

+----+-------------+-------+------+---------------+------+---------+------+-------+---------------------------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+------+---------------+------+---------+------+-------+---------------------------------+

| 1 | SIMPLE | urls | ALL | NULL | NULL | NULL | NULL | 62228 | Using temporary; Using filesort |

+----+-------------+-------+------+---------------+------+---------+------+-------+---------------------------------+

以上不符合效率,我该如何正确地做到?

UPDATE

似乎使用答案中提到的解决方案仍无济于事:

MysqL> explain SELECT *

-> FROM (

-> SELECT @cnt := COUNT(*) + 1,-> @lim := 10

-> FROM urls

-> ) vars

-> STRAIGHT_JOIN

-> (

-> SELECT r.*,-> @lim := @lim - 1

-> FROM urls r

-> WHERE (@cnt := @cnt - 1)

-> AND RAND(20090301) < @lim / @cnt

-> ) i;

+----+-------------+------------+--------+---------------+------+---------+------+-------+------------------------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+------------+--------+---------------+------+---------+------+-------+------------------------------+

| 1 | PRIMARY |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值