当前位置:首页 > Mysql教程 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-09 13:31:07 浏览: 评论:0 

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

Tags: mysql随机查询 mysql取值效率

分享到:

相关文章