微信号:phpdaily

介绍:PHP在线专注于PHP编程语言学习,PHP开发经验分享,工作问题解决以及PHP在线技能测评等多功能为一体的服务系统,希望给工作学习中的PHPER带来些帮助。

mysql多表随机查询优化方案

2018-07-11 19:27 Lane

微信公众号:PHP在线

本文主要谈论如何实现Mysql的随机查询,多表随机查询。在Mysql中随机取出一条记录的实现方法。
我们通常的查询是没有where或者where fields>2这样的方式,这样只能取出在某种条件下的一条或多条,如果条件不变(例如2),那么结果就一直不会有变化。
那么如何实现随机查询呢?本人有两种方法。

方法一、数据表记录不大的情况下:
select * from `table`

查出来所有的记录列表,然后array_rand()随机出一个结果的数组的key。连续的key可以使用mt_rand(1, count($list)); 为什么不使用rand而是mt_rand呢?因为mt_rand币rand快4倍。
 这种情况下,查出整个列表,存入到Memcache的缓存或者Redis的NoSQL中,下次直接取出结果集而不需要查表。不过当数据量一旦超过万级别,取出列表就很困难了。

方法二:使用SQL语句随机

MYSQL函数RAND(),产生一个0-1之间的小数,然后MAX(id)可以获得该表中最大的ID。那么MAX(id) * RAND()就可以取到表中所有的ID。OK,看语句。

SELECT * FROM `table` WHERE `id` > (SELECT RAND() * (SELECT MAX(`id`) FROM `table`) LIMIT 0, 1

既然MAX(id) * MAX(id)可以取到表里所有值,那么本语句的WHERE就可以取到本表的所有情况,那么这就是一个所有记录都有可能被取到的随机SQL语句。


 
PHP在线 更多文章 Redis数据结构详解,五种数据结构分分钟掌握 这些GIT经验够你用一年了 如何发挥出PHP7的高性能 API接口设计 PHP7.0新增功能详解
猜您喜欢 7分钟理解JS的节流、防抖及使用场景 Arrow Debreu price与快速拟合 测试开发之路--聊聊自动化的打开方式 云科技时代2018:数字化转型进入新阶段 20省份晒工资单,你拖后腿了吗?