北京SEO

sql order by rand随机数据优化与性能对比

2019/10/10/17:36:18  阅读:2223  来源:谷歌SEO算法  标签: DNS

今天要做网站文章右则随机推荐功能,这个我们需要根据当前分类中随机调用不同文章出来,下面我来给大家分享我在使用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 秒,又提供了几倍呀,代码如下:

  1. SELECT*
  2. FROM表名ASt1
  3. JOIN(
  4. SELECTROUND(RAND()*(
  5. SELECTMAX(id)
  6. FROM表名))ASid
  7. )ASt2
  8. WHEREt1.id>=t2.id
  9. ORDERBYt1.idASC
  10. LIMIT10

显示行 0 - 9 (10 总计, 查询花费 0.0025 秒),最后还可以优化一下,代码如下:

  1. SELECTs_url,title
  2. FROM表名ASt1
  3. JOIN(
  4. SELECTROUND(RAND()*(
  5. SELECTMAX(id)
  6. FROM表名))ASid
  7. )ASt2
  8. WHEREt1.id>=t2.idandt1.z_type=$z_typeORDERBYt1.idascLIMIT10//phpfensi.com

显示行 0 - 9 (10 总计,查询花费 0.0008 秒).

总结一下,我们如果用同样的方法在字段选择时越少越好,这不从0.0025直接降到0.0008秒了.

广告内容

sql order by rand随机数据优化与性能对比 sql order by rand随机数据优化与性能对比 sql order by rand随机数据优化与性能对比

相关阅读

热门评论

昝辉Zac 昝辉Zac

Zac的SEO博客,坚持12年,优化成为生活。

总篇数171

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法