sql order by rand随机数据优化与性能对比
发布:smiling 来源: PHP粉丝网 添加日期:2014-09-29 14:13:05 浏览: 评论:0
今天要做网站文章右则随机推荐功能,这个我们需要根据当前分类中随机调用不同文章出来,下面我来给大家分享我在使用order by rand取随机数据优化.
测试环境:apache2.2/php5.2/mysql5
测试数据:15W+数据,数据表大小600MB
测试语句:最初使用的是 order by rand()了,发现几万条数据居然要10秒之长的时间很是悲剧吧,代码如下:
SELECT * FROM `表名` order by rand()
显示行 0 - 29,154,825 总计, 查询花费 10.1125 秒,后来网上搜索到如下方法,同样数据感觉有很大的提高了,这里测试的是15W数据,代码如下:
SELECT * FROM 表名 WHERE id >= ((SELECT MAX(id) FROM 表名)-(SELECT MIN(id) FROM 表名)) *
RAND() + (SELECT MIN(id) FROM 表名) LIMIT 10
显示行 0 - 29 (154,825 总计, 查询花费 0.0221 秒),感觉不错了,有朋友说用join可能更好,于时找了一段代码测试一下查询花费 0.0025 秒,又提供了几倍呀,代码如下:
- SELECT *
- FROM 表名 AS t1
- JOIN (
- SELECT ROUND( RAND( ) * (
- SELECT MAX( id )
- FROM 表名 ) ) AS id
- ) AS t2
- WHERE t1.id >= t2.id
- ORDER BY t1.id ASC
- LIMIT 10
显示行 0 - 9 (10 总计, 查询花费 0.0025 秒),最后还可以优化一下,代码如下:
- SELECT s_url,title
- FROM 表名 AS t1
- JOIN (
- SELECT ROUND( RAND( ) * (
- SELECT MAX( id )
- FROM 表名 ) ) AS id
- ) AS t2
- WHERE t1.id >= t2.id and t1.z_type = $z_type ORDER BY t1.id asc LIMIT 10 //phpfensi.com
显示行 0 - 9 (10 总计,查询花费 0.0008 秒).
总结一下,我们如果用同样的方法在字段选择时越少越好,这不从0.0025直接降到0.0008秒了.
Tags: rand随机 mysql数据优化
相关文章
- ·mysql 随机获取记录order by rand 优化(2014-10-09)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)