萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql中隨機查詢取值效率優化

mysql中隨機查詢取值效率優化

在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;

copyright © 萬盛學電腦網 all rights reserved