Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6258874
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: Mysql/postgreSQL

2014-08-28 21:50:16

原文地址:mysql随机提取记录数的方法 作者:hxl


通常情况下我们使用如下的语句随机返回一条记录数
SELECT * FROM tb_dic_class ORDER BY RAND() LIMIT 1,测试发现这个方法并不是最优化的,下面列举了一个效率更好的例子:

1.表记录数
mysql> SELECT count(1) FROM tb_dic_class;
+----------+
| count(1) |
+----------+
|  1000000 |
+----------+
1 row in set (0.37 sec)

2.常用的返回随机记录的方法

mysql>
SELECT * FROM tb_dic_class ORDER BY RAND() LIMIT 1 \G;
*************************** 1. row ***************************
  class_id: 839335
class_name: 839335班
createtime: 2014-08-18 14:27:23
modifytime: 2014-08-18 14:27:23
1 row in set (8.69 sec)

ERROR:
No query specified


3.效率更好的方法

mysql> SELECT * FROM tb_dic_class AS t1
    ->   JOIN (SELECT ROUND(RAND() *
    ->           (SELECT MAX(class_id) FROM tb_dic_class)) AS id) AS t2 WHERE t1.class_id >= t2.id ORDER BY t1.class_id ASC LIMIT 1 \G;
*************************** 1. row ***************************
  class_id: 400243
class_name: 400243班
createtime: 2014-08-18 14:25:23
modifytime: 2014-08-18 14:25:23
        id: 400243
1 row in set (1.18 sec)

ERROR:
No query specified

4.下面这个查询效果更佳
mysql> SELECT *
    -> FROM tb_dic_class AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(class_id) FROM tb_dic_class)-(SELECT MIN(class_id) FROM tb_dic_class))+(SELECT MIN(class_id) FROM tb_dic_class)) AS id) AS t2
    -> WHERE t1.class_id >= t2.id
    -> ORDER BY t1.class_id LIMIT 1;
+----------+------------+---------------------+---------------------+--------+
| class_id | class_name | createtime          | modifytime          | id     |
+----------+------------+---------------------+---------------------+--------+
|   448629 | 448629班   | 2014-08-18 14:25:36 | 2014-08-18 14:25:36 | 448629 |
+----------+------------+---------------------+---------------------+--------+
1 row in set (0.20 sec)

--The End --

阅读(804) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~