首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

各主流資料庫隨機抽取記錄的 SQL 寫法對照表

     編輯:MySQL 資料庫相關知識

需求場景

電商、推薦系統常需「隨機推薦 N 筆商品」。不同資料庫語法差異較大,整理如下:

語法對照

資料庫SQL 範例說明
MySQLSELECT * FROM tablename ORDER BY RAND() LIMIT 10;RAND() 產生 0~1 隨機數排序
SQL ServerSELECT TOP 10 * FROM tablename ORDER BY NEWID();NEWID() 產生唯一識別碼達到隨機效果
AccessSELECT TOP 10 * FROM tablename ORDER BY Rnd([FId]);FId 為主鍵欄位名,Rnd() 需傳入種子

效能提醒

  • MySQL ORDER BY RAND() 全表掃描:資料量超過萬筆時極慢。優化方案:
    ① 先取最大 ID → 應用層產生隨機 ID → WHERE id >= 隨機ID LIMIT 10
    ② 覆蓋索引 + WHERE RAND() < 0.01 近似抽樣
  • SQL Server NEWID() 同樣需全表排序,大表建議使用 TABLESAMPLE 或應用層抽樣。

最佳實踐建議

  1. 小表(< 5,000 筆)直接用上述標準語法
  2. 大表採用「應用層隨機 ID + 範圍查詢」避免排序開銷
  3. 若需嚴格均勻分佈,考慮預計算隨機排序欄位並建立索引
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved