| 數據庫 | 語句 | 說明 |
|---|---|---|
| MySQL | SELECT * FROM tbl ORDER BY RAND() LIMIT 10; | RAND() 生成 0-1 隨機數排序,LIMIT 取前 N 行 |
| SQL Server | SELECT TOP 10 * FROM tbl ORDER BY NEWID(); | NEWID() 生成唯一標識符排序,TOP 取前 N 行 |
RAND() 在 8.0+ 可優化,但仍不適合大數據量NEWID() 同理-- MySQL
SELECT * FROM tbl
WHERE id >= (SELECT FLOOR(RAND() * (SELECT MAX(id) FROM tbl)))
ORDER BY id LIMIT 10;
-- SQL Server
SELECT TOP 10 * FROM tbl
WHERE id >= (SELECT CAST(RAND() * (SELECT MAX(id) FROM tbl) AS INT))
ORDER BY id;
SELECT * FROM tbl TABLESAMPLE (10 ROWS);
-- 或百分比
SELECT * FROM tbl TABLESAMPLE (1 PERCENT);
注意:TABLESAMPLE 基於頁採樣,不保證精確行數,且需統計信息較新。
ALTER TABLE tbl ADD rand_val DOUBLE;
UPDATE tbl SET rand_val = RAND(); -- 或 NEWID() 轉換
CREATE INDEX idx_rand ON tbl(rand_val);
-- 查詢
SELECT * FROM tbl ORDER BY rand_val LIMIT 10;
定期 UPDATE tbl SET rand_val = RAND() 刷新隨機性。
ORDER BY RAND()/NEWID()COUNT(*),再隨機 OFFSET)