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

mysql不用rand()函數實現隨機讀取數據庫記錄的方法

編輯:MySQL綜合教程

mysql教程不用rand()函數實現隨機讀取數據庫教程記錄的方法
,以及google了一下相關的文件,發現大家幾乎清一色使用 order by rand() 來達到該目的,但是實際上存在非常嚴重的性能問題。
如果你的數據庫裡只有幾百條,且調用次數又不多的情況下,你愛用啥方法就用啥方法。
但如果你有10萬或100萬或更多條數據的話,那麼每次執行帶 order by rand() 的 sql 語句的時候,mysql服務器需要計算出10萬或100萬或更多個隨機數,可想而知對數據庫服務器的資源浪費有多大。

我建議大家使用以下方法之一:

第一種:count + limit

    1、select count(*) from table_name // 獲取到數據庫總記錄 $count
    2、$randoffset = rand(0, $count-1);
    3、select * from table_name limit $randoffset,1

第二種:maxid

    1、select max(id) from table_name // 獲取數據庫主鍵字段的最大值 $maxid
    2、$randid = rand(0, $maxid);
    3、select * from table_name where id>=$randid limit 1


    如果能確保id是連續的,甚至可以直接算出一組 $randid,然後用 where id in ($randid_1, $randid_2, ...),批量提取數據
    如果id不是連續的,可以使用多算一些隨機數,然後 where id in ($randid_1, $randid_2, ... $randid_100) limit 10,雖然我為了提取10條記錄計算了100個隨機數,但總比用 order by rand() 需要算幾萬幾十萬幾百萬個隨機數劃算的多吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved