LaneBlog

蝼蚁虽小,也有梦想

PHP Socket服务 | PHP微信开发框架 | 开源博客

mysql多表随机查询优化方案

Clicks: 6058 Date: 2014-02-20 17:40:06 Power By 李轩Lane

    本文主要谈论如何实现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语句。
©2014 www.lanecn.com , All rights reserved. Power By Li Xuan.  京ICP备14005030号