首页  >  文章  >  数据库  >  mysql随机查询的优化

mysql随机查询的优化

WBOY
WBOY原创
2016-06-07 16:16:481319浏览

mysql随机查询最常见的写法如下: 1 SELECT * FROM tablename ORDER BY RAND() LIMIT 1 php手册上如此解释:关于从MySQL表中选择随机行: SELECT * FROM tablename ORDER BY RAND() LIMIT 1适用于小桌子,但一旦桌子

MySQL随机查询最常见的写法如下:

​1 SELECT * FROM 表名 ORDER BY RAND() LIMIT 1

php手册上如此解释:

关于从 MySQL 表中选择随机行:

​SELECT * FROM 表名 ORDER BY RAND() LIMIT 1

适用于小表,但是一旦表增长超过 300,000 条记录左右,这将非常慢,因为 MySQL 必须处理表中的所有条目,对它们进行随机排序,然后返回排序结果的第一行,而且这个排序需要很长时间。相反,你可以这样做(至少如果你有 auto_increment PK):

​SELECT MIN(id), MAX(id) FROM 表名;

​将结果取入$a

​$id=rand($a[0],$a[1]);

​SELECT * FROM 表名 WHERE id>='$id' LIMIT 1.

大意是说,如果你用ORDER BY RAND()来随机读取记录的话,当数据表记录达到30万或者更多的时候,mysql将非常吃力。所以php手册里给了一种方法,结合php来实现:

 首先 SELECT MIN(id), MAX(id) FROM tablename; 轻松获取数据库;

然后$id=rand($a[0],$a[1]); 产生一个随机数;

='$id' LIMIT 1 将上面产生的随机数带入查询;

显然上面是效率最高的。

如果需要多条记录的话,就循环查询,并记得删除重复记录。

其他的一些方法可以自行查阅一下google或者百度。

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn