用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > mysql教程

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

时间:2015-01-23  来源:西部数据  作者:西部数据

在mysql中随机查询数据是一个比较常用的功能,但是这个随机查询功能如果没使用好你的数据库就会卡死,特别到了几十万,上百万数据时更要注意了,下面我来介绍mysql中随机查询取值效率优化.

mysql使用rand()进行随机查询,代码如下:

order by rand() limit x

随机mysql查询效率极其低下,今晚本人就遇到几个wordpress插件的作者,随机取值,竟然都是直接,代码如下:

order by rand()  

这也太坑爹了,数据一多,譬如你有个5万~10万,加上每天几千IP,那效率就跟蜗牛似的,不信你试试,这是严重不负责任的随机查询.

后来百度找了一个方法,代码如下:

  1. SELECT * 
  2. FROM table 
  3. WHERE id >= ( 
  4. SELECT CEIL( RAND( ) * ( 
  5. SELECT MAX( id ) 
  6. FROM table ) ) ) 
  7. LIMIT 1 
  8.  
  9. --或者 
  10.  
  11. SELECT * 
  12. FROM table 
  13. WHERE id >= ( 
  14. SELECT ROUND( RAND( ) * ( 
  15. SELECT MAX( id ) 
  16. FROM table ) ) ) 
  17. LIMIT 1 

但是还是没有效果了,再看下面,代码如下:

  1. SELECT * 
  2. FROM `tableAS t1 
  3. JOIN ( 
  4. SELECT ROUND( RAND( ) * ( 
  5. SELECT MAX( id ) 
  6. FROM `table` ) ) AS id 
  7. AS t2 
  8. WHERE t1.id >= t2.id 
  9. ORDER BY t1.id ASC 
  10. LIMIT 1 --phpfensi.com 

这样就快了很多,但是这个方法,会导致大部分的取值都在1/2前范围内,需要重新改造下,代码如下:

  1. SELECT * 
  2. FROM `tableAS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM 
  3.  
  4. `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2 
  5. WHERE t1.id >= t2.id 
  6. ORDER BY t1.id LIMIT 1;
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
栏目更新
栏目热门