通常情况下我们使用如下的语句随机返回一条记录数

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 --

mysql随机显示记录_mysql随机提取记录数的方法相关推荐

  1. mysql随机显示记录_MySQL随机读取表中记录

    order by rand()来实现 select * from table order by rand(); 内存临时表 order by rand() 是一般通过内存临时表排序,可以通过执行计划e ...

  2. mysql查询显示技巧_MYSQL SQL高级查询技巧

    1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. ...

  3. mysql数据库显示问号_mysql数据库中文显示问号

    mysql命令框中向表中插入中文字符,在可视化工具MySQL Workbeach或phpMyAdmin中不显示或显示乱码的问题解决 mysql命令框中向表中插入中文字符,在可视化工具MySQL Wor ...

  4. mysql binlog php处理_MySQL数据的binlog处理方法

    最近磁盘增长的非常快,发现binlog日志占用很大的磁盘资源.我们采用手动清理,后面设置一下自动清理. 最近磁盘增长的非常快,发现binlog日志占用很大的磁盘资源.我们采用手动清理,,后面设置一下自 ...

  5. mysql 随机生成中文名_mysql随机生成名字

    update tteacher set tname=concat(substring('赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方 ...

  6. mysql sql 一部分记录_MySQL性能优化实践(很全面,值得收藏)

    一 题记 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 SQL 查询语句关联5,6张表且编写不够规范,导致 MySQL 在执行 SQL 语 ...

  7. mysql profile 不记录_mysql profile使用(转)

    mysql的sql语句优化都使用explain,但是这个没有办法知道详细的Memory/CPU等使用量 MySQL Query Profiler, 可以查询到此 SQL 语句会执行多少, 并看出 CP ...

  8. mysql数据库访问记录_MySQL数据库运行、访问记录与日志

    以下的文章主要向大家介绍的是查看MySQL数据库运行.访问记录与日志的实际操作,我们大家都知道MySQL数据库运行.访问记录与日志的实际应用可以说很是广泛,以下的文章就是对这些内容的详细介绍. 1.首 ...

  9. mysql存储过程异常记录_MySQL存储过程的“异常处理”

    Q:何为异常? A:程序在执行过程中有可能出错,运行时错误叫做异常. 默认情况下,当存储过程运行出错时,过程会立即终止,并打印系统错误消息. 实验环境: mysql> use TENNIS Re ...

最新文章

  1. ng-template和对应生成的注释
  2. Mybatis中的核心配置文件SqlMapConfig.xml详细介绍
  3. Java开发需要达到什么样的水平才称得上架构师?
  4. 一文看懂响应率模型开发内容
  5. 浙大python判断两个字符串是否为变位词_Python实现对变位词的判断
  6. C# 类型转换问题一
  7. openJDK 源码下载
  8. 98版五笔字型实用学习教程
  9. 程序员常用官网和工具站
  10. 一个时代的印记:还记得那些年我们逃课去的网吧
  11. 密码学hash函数-SHA256-512
  12. php信鸽针对别名,【经验】阿翁:信鸽回血留种公式(图)
  13. 树莓派制作无线路由器
  14. 去除字符串中的重复字符,算法不使用额外缓冲。如abbc-abc
  15. [转载]藏在人口数据中的商业秘密
  16. android 格式转化,智兔格式转换器
  17. Reliable Cloud Infrastructure: Design and Process学习笔记
  18. pycharm终端中安装yaml,报错Requirement already satisfied 的解决办法
  19. Java使用hotmail的SMTP服务器转发邮件出错
  20. 关不关机 扫地机器人_扫地机器人需要关机吗

热门文章

  1. 细数python标准库中低调的模块
  2. matlab barh命令,matlab中的bar, barh
  3. java程序设计_Java程序设计-Object类(笔记)
  4. linux下tail命令的用法,在Linux命令中tail的用法
  5. Rainbond 5.0正式发布, 支持对接管理已有Kubernetes集群...
  6. 自动化测试--testNG
  7. cut out数据增强_被多种离散化场景困扰?8种python技巧!让数据处理更简单
  8. 最新有道翻译接口JS逆向分析
  9. 用FTP命令进行文件批量上传或下载
  10. 阿里云仓库使用小技巧