介紹 MySQL RAND() 函數在隨機查詢、隨機更新中的基礎用法,並揭示 ORDER BY RAND() 性能陷阱。
RAND() -- 返回 0~1 隨機浮點數
RAND(N) -- 以 N 為種子,產生可重複序列
SELECT * FROM `table` ORDER BY RAND() LIMIT 5;
ORDER BY 子句中使用 RAND() 列會被多次計算,導致全表掃描 + 臨時表 + filesort。
UPDATE cdb_posts SET views = RAND();
INSERT INTO t (val) VALUES (RAND()), (RAND()), (RAND());
RAND() 適合隨機更新、少量測試數據生成;大表隨機查詢嚴禁 ORDER BY RAND(),必須用索引點查方案。