電商、推薦系統常需「隨機推薦 N 筆商品」。不同資料庫語法差異較大,整理如下:
| 資料庫 | SQL 範例 | 說明 |
|---|---|---|
| MySQL | SELECT * FROM tablename ORDER BY RAND() LIMIT 10; | RAND() 產生 0~1 隨機數排序 |
| SQL Server | SELECT TOP 10 * FROM tablename ORDER BY NEWID(); | NEWID() 產生唯一識別碼達到隨機效果 |
| Access | SELECT TOP 10 * FROM tablename ORDER BY Rnd([FId]); | FId 為主鍵欄位名,Rnd() 需傳入種子 |
ORDER BY RAND() 全表掃描:資料量超過萬筆時極慢。優化方案:WHERE id >= 隨機ID LIMIT 10WHERE RAND() < 0.01 近似抽樣NEWID() 同樣需全表排序,大表建議使用 TABLESAMPLE 或應用層抽樣。