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,那效率就跟蜗牛似的,不信你试试,这是严重不负责任的随机查询.
后来百度找了一个方法,代码如下:
- 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;
Tags: mysql随机查询 mysql取值效率
相关文章
- ·mysql随机查询数据与性能分析(2014-10-08)
- ·mysql随机查询数据(2014-10-17)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)