加入收藏 | 设为首页 | 会员中心 | 我要投稿 甘孜站长网 (https://www.0836zz.com.cn/)- 运维、物联设备、数据计算、智能推荐、云管理!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql中随机查询取值效率优化

发布时间:2022-07-04 10:36:26 所属栏目:MySql教程 来源:互联网
导读:在mysql中随机查询数据是一个比较常用的功能,但是这个随机查询功能如果没使用好你的数据库就会卡死,特别到了几十万,上百万数据时更要注意了,下面我来介绍mysql中随机查询取值效率优化. mysql使用rand()进行随机查询,代码如下: order by rand() limit x 随机m
  在mysql中随机查询数据是一个比较常用的功能,但是这个随机查询功能如果没使用好你的数据库就会卡死,特别到了几十万,上百万数据时更要注意了,下面我来介绍mysql中随机查询取值效率优化.
 
  mysql使用rand()进行随机查询,代码如下:
 
  order by rand() limit x
 
  随机mysql查询效率极其低下,今晚本人就遇到几个wordpress插件的作者,随机取值,竟然都是直接,代码如下:
 
  order by rand()  
 
  这也太坑爹了,数据一多,譬如你有个5万~10万,加上每天几千IP,那效率就跟蜗牛似的,不信你试试,这是严重不负责任的随机查询.
 
  后来百度找了一个方法,代码如下:
 
  SELECT *
  FROM table
  WHERE id >= (
  SELECT CEIL( RAND( ) * (
  SELECT MAX( id )
  FROM table ) ) )
  LIMIT 1
   
  --或者
   
  SELECT *
  FROM table
  WHERE id >= (
  SELECT ROUND( RAND( ) * (
  SELECT MAX( id )
  FROM table ) ) )
  LIMIT 1
  但是还是没有效果了,再看下面,代码如下:
 
  SELECT *
  FROM `table` AS t1
  JOIN (
  SELECT ROUND( RAND( ) * (
  SELECT MAX( id )
  FROM `table` ) ) AS id
  ) AS t2
  WHERE t1.id >= t2.id
  ORDER BY t1.id ASC
  LIMIT 1 --phpfensi.com
  这样就快了很多,但是这个方法,会导致大部分的取值都在1/2前范围内,需要重新改造下,代码如下:
 
  SELECT *
  FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM
   
  `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2
  WHERE t1.id >= t2.id
  ORDER BY t1.id LIMIT 1;

(编辑:甘孜站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读