mysql 随机取一条数据 (这个有点特殊哦)

zkvistor 2015-01-04 03:11:21
1 order by rand() 性能差
2 网上现有的
select SQL_NO_CACHE c.id

FROM document as c

JOIN (

select ROUND(

rand() * ( (SELECT MAX(id) FROM document))

) as id

) AS T

where c.id >= T.id limit 1;

这个要求ID 是连续自增的,我的表document 的主键ID ( long类型 ) 不是连续的 ,也不适应
...全文
554 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zkvistor 2015-02-28
  • 打赏
  • 举报
回复
引用 4 楼 zheng_luck 的回复:
是不是因为你的document表里的主键ID的值都很大很大,用这个方法产生的随机数都小于表document里ID最小的值,这样就可能 出现楼主所说的每次执行取到的那条数据都是同一条(document表中ID最小的那条),楼主查查看呢
是的,document的ID 值很大,比如: 8358655294092230656
zheng_luck 2015-01-04
  • 打赏
  • 举报
回复
是不是因为你的document表里的主键ID的值都很大很大,用这个方法产生的随机数都小于表document里ID最小的值,这样就可能 出现楼主所说的每次执行取到的那条数据都是同一条(document表中ID最小的那条),楼主查查看呢
zkvistor 2015-01-04
  • 打赏
  • 举报
回复
引用 2 楼 ACMAIN_CHM 的回复:
楼主给的这个例子并不要求ID连续。注意这儿使用的是 c.id >= T.id
执行后,取的值是一样的
ACMAIN_CHM 2015-01-04
  • 打赏
  • 举报
回复
楼主给的这个例子并不要求ID连续。注意这儿使用的是 c.id >= T.id
benluobo 2015-01-04
  • 打赏
  • 举报
回复
为什么第二个要求连续自增的? 只要是主键id,第二个都可以随机取得一个

56,682

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧