程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql rand()隨機取出記錄的優化

Mysql rand()隨機取出記錄的優化

編輯:MySQL綜合教程

在mysql中我們要查詢數據表中隨機數據最常用的就是使用Rand()函數了,但是Rand()函數在使用幾萬條記錄是很快的,如果上千萬條時可能會有問題,下面我來介紹Rand()函數的用法。

MySQL隨機查詢出一條記錄

 代碼如下 復制代碼


$sql = “SELECT * FROM pinglun WHERE id >= ((SELECT MAX(id) FROM pinglun)-(SELECT MIN(id) FROM pinglun)) * RAND() + (SELECT MIN(id) FROM pinglun) LIMIT 1″;

這樣寫效率比較高,,千萬不要用order by rand()那種,,數據量大了,order一下效率很低


下面我來介紹一下 隨機取出記錄的優化


第一種方法:

結合應用層來實現

只要SELECT MAX(id) FROM table;取出最大的id,然後用隨機生成一個1~MAX(id)數,比如PHP mt_rand(1, MAX(id)) 然後再在用這個隨機id去查詢那條記錄。

第二種方法:

利用數據庫生成的隨機的id,子查詢的方式

 代碼如下 復制代碼 SELECT CEIL(RAND() * (SELECT MAX(id) FROM table));

這樣我們就可以獲取一個隨機的id.(對MAX()進行優化,不使用SELECT CEIL(RAND() * MAX(id)) FROM table),執行一下,大大優化了

 代碼如下 復制代碼


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


第三種方法:
利用JOIN的方法

 代碼如下 復制代碼

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. 下一頁:
Copyright © 程式師世界 All Rights Reserved