MySQL取出随机数据

作者:mdxy-dxy 时间:2024-01-19 22:12:02 

他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询.

翻了手册,找到了下面这个语句,可以完成任务了,但效率较低

SELECT * FROM table_name ORDER BY rand() LIMIT 5;

rand在手册里是这么说的:
RAND() 
RAND(N) 
返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。 
mysql> select RAND();
        -> 0.5925
mysql> select RAND(20);
        -> 0.1811
mysql> select RAND(20);
        -> 0.1811
mysql> select RAND();
        -> 0.2079
mysql> select RAND();
        -> 0.7888
你不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000的集合的随机样本。注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。 

但我试了一下,8千条记录的表,执行一次需要0.08 sec,.慢了些

后来请教了google,得到如下代码


SELECT *
FROM table_name AS r1 JOIN
   (SELECT ROUND(RAND() *
          (SELECT MAX(id)
           FROM table_name)) AS id)
   AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 5;

执行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支持这样的子查询. 

下面是其它网友的补充:

select id from  zhyx_items   order by rand()  这样效率太低了

优化sql语句之后:


SELECT t1.id
FROM zhyx_items AS t1 JOIN
(SELECT ROUND(RAND() *
((SELECT MAX(id) FROM zhyx_items)-(SELECT MIN(id) FROM zhyx_items))+
(SELECT MIN(id) FROM zhyx_items)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 0,5;
标签:MySQL,随机数据
0
投稿

猜你喜欢

  • Python数据分析之 Matplotlib 散点图绘制

    2021-09-19 07:05:46
  • Python装饰器的练习题

    2023-12-07 13:11:48
  • python中使用Celery容联云异步发送验证码功能

    2023-07-29 08:27:06
  • 基于Python PaddleSpeech实现语音文字处理

    2023-04-26 19:14:42
  • Django实现文件分享系统的完整代码

    2022-07-12 11:28:21
  • php控制文件下载速度的方法

    2023-07-19 00:21:30
  • 详解Vue返回值动态生成表单及提交数据的办法

    2024-05-28 16:09:58
  • Docker构建python Flask+ nginx+uwsgi容器

    2023-07-25 06:36:43
  • 丰富段落里的标签

    2008-03-16 14:11:00
  • 怎样在不同版本SQL Server中存储数据

    2009-01-20 13:11:00
  • 安装和使用percona-toolkit来辅助操作MySQL的基本教程

    2024-01-14 17:25:04
  • 如何上传一个.SQL文件到远程主机并且执行它来部署一个SQL数据库

    2007-09-23 13:03:00
  • 如何在Linux 系统中使用apt 包管理器安装 Git LFS

    2022-08-29 15:33:30
  • iOS和Android用同一个二维码实现跳转下载链接的方法

    2024-04-22 13:24:16
  • JavaScript的事件代理比你想的要简单

    2009-04-27 12:40:00
  • go程序测试CPU占用率统计ps vs top两种不同方式对比

    2024-05-05 09:27:04
  • mysql主从库不同步问题解决方法

    2024-01-26 03:57:19
  • 标签明晰、有效

    2010-01-18 12:22:00
  • Python简单实现两个任意字符串乘积的方法示例

    2023-10-29 12:04:40
  • python中OrderedDict的使用方法详解

    2023-08-26 14:00:40
  • asp之家 网络编程 m.aspxhome.com