首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 隨機查詢與隨機更新實戰:RAND() 函數應用與性能陷阱

     編輯:MySQL 綜合教學

介紹 MySQL RAND() 函數在隨機查詢、隨機更新中的基礎用法,並揭示 ORDER BY RAND() 性能陷阱。

RAND() 基礎語法


RAND()        -- 返回 0~1 隨機浮點數
RAND(N)       -- 以 N 為種子,產生可重複序列

隨機查詢:直觀但低效的寫法


SELECT * FROM `table` ORDER BY RAND() LIMIT 5;
  • 手冊警告:ORDER BY 子句中使用 RAND() 列會被多次計算,導致全表掃描 + 臨時表 + filesort。
  • 實測 15 萬行表查 5 行耗時 8 秒+。

隨機更新:全表隨機賦值


UPDATE cdb_posts SET views = RAND();
  • 單條語句即可將指定列更新為隨機值,適用於測試數據生成。
  • 注意字段類型/長度是否足夠容納浮點數文本表示。

INSERT 中使用 RAND()


INSERT INTO t (val) VALUES (RAND()), (RAND()), (RAND());

高性能隨機查詢替代方案(參考文章 178256)

  • JOIN 衍生表 + 主鍵範圍隨機點查:毫秒級穩定。
  • 應用層預生成隨機 ID 集合。

總結

RAND() 適合隨機更新、少量測試數據生成;大表隨機查詢嚴禁 ORDER BY RAND(),必須用索引點查方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved