当前位置:数据库 > MySQL >>

mysql中随机查询取值效率优化

mysql使用rand()进行随机查询

 代码如下 复制代码

1 order by rand() limit x

随机mysql查询效率极其低下,今晚本人就遇到几个wordpress插件的作者,随机取值,竟然都是直接

 

 代码如下 复制代码
1 order by rand()

这也太坑爹了,数据一多,譬如你有个5万~10万,加上每天几千IP,那效率就跟蜗牛似的。不信你试试。这是严重不

负责任的随机查询。

后来百度找了一个方法

 代码如下 复制代码

SELECT *
FROM table
WHERE id >= (
SELECT CEIL( RAND( ) * (
SELECT MAX( id )
FROM table ) ) )
LIMIT 1

或者

SELECT *
FROM table
WHERE id >= (
SELECT ROUND( RAND( ) * (
SELECT MAX( id )
FROM table ) ) )
LIMIT 1

但是还是没有效果了,再看下面

 代码如下 复制代码

SELECT *
FROM `table` AS t1
JOIN (
SELECT ROUND( RAND( ) * (
SELECT MAX( id )
FROM `table` ) ) AS id
) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC
LIMIT 1

这样就快了很多哦,但是这个方法,会导致大部分的取值都在1/2前范围内,需要重新改造下:

 代码如下 复制代码

SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM

`table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 1;

补充:数据库,mysql教程 
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,