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

主流數據庫隨機查詢寫法大全:SQL Server、MySQL、PostgreSQL、Access

     編輯:關於SqlServer

為什麼需要隨機查詢?

抽獎、推薦、測試數據抽樣、A/B 實驗分桶……隨機抽取 N 條記錄是高頻需求。各大數據庫語法略有差異,本文匯總備查。

語法速查表

數據庫語法關鍵函數/關鍵字備註
SQL Server SELECT TOP N * FROM table ORDER BY NEWID(); NEWID() 生成唯一標識符 每行生成一個 GUID 再排序,大表性能一般
Access SELECT TOP N * FROM table ORDER BY Rnd(ID); Rnd(數值字段) ID 可換任意數值列,如 Rnd(Len(UserName))
MySQL SELECT * FROM table ORDER BY RAND() LIMIT N; RAND() + LIMIT 大表慎用,全表掃描+臨時表+文件排序
PostgreSQL SELECT * FROM table ORDER BY RANDOM() LIMIT N; RANDOM() + LIMIT 同 MySQL,大表建議 TABLESAMPLE 或主鍵範圍隨機

大表優化提示

  • SQL Server:WHERE ID >= (SELECT CAST(RAND() * (SELECT MAX(ID) FROM table) AS INT)) ORDER BY ID OFFSET 0 ROWS FETCH NEXT N ROWS ONLY(需連續主鍵)。
  • MySQL / PostgreSQL:TABLESAMPLE SYSTEM (10) 伯努利採樣,或先隨機主鍵再 IN 查詢。
  • 避免在億級表上直接 ORDER BY RAND(),會導致磁盤 I/O 飆升。

結語

小表直用標準寫法;大表必須結合業務主鍵分佈設計採樣策略。收藏本表,下次隨機查詢不再查文檔。

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