我想在我的數據庫中選擇一個隨機行。我看到一個網站上的此解決方案:在SQL數據庫中選擇隨機行
SELECT column FROM table
ORDER BY RAND()
LIMIT 1
此SQL查詢運行,但有人說我這是一個非高性能的查詢。還有其他解決方案嗎?
Thx
我想在我的數據庫中選擇一個隨機行。我看到一個網站上的此解決方案:在SQL數據庫中選擇隨機行
SELECT column FROM table
ORDER BY RAND()
LIMIT 1
此SQL查詢運行,但有人說我這是一個非高性能的查詢。還有其他解決方案嗎?
Thx
它是。你不得不數
SELECT COUNT(*) FROM `table`;
這與PHP函數mt_rand後(行號)從1獲得隨機到$計數與查詢得到它:
SELECT `column` FROM `table` LIMIT $rand, 1
有這樣多了很多的討論在this question中包括對不同DBMS的性能影響和策略。
該主題的所有答案都可以分爲兩類。 1. **緩慢**使用RAND()(或DBMS特定的同義詞)或2.在[1,id]範圍內計算一些隨機的id,並找到> =的值。並且這個解決方案給我們提供了不規則的隨機化覆蓋率(例如:1,2,3,4,5,6,7,8,9,1000000000000)。在這種情況下,在99.99%的情況下,您將獲得最新的行。這是**不是真正的均勻隨機** – zerkms 2010-05-27 03:40:00
我認爲這是一個TANSTAAFL的問題。像TABLESAMPLE這樣的方法顯然是爲了提高速度的隨機性(並且是特定於供應商的)。如果你想要追尋真正的隨機性的兔子洞,那麼你正在爲實施挑戰增加一個理論數學問題。 您可以添加一個觸發器,在插入時使用僞隨機數填充列,將大表預分片爲可管理的分片,然後從一個分片中選擇一行rand()limit 1。因此,預先計算一些「假」隨機性。我同意所有這些方法都涉及純度和實用性之間的折衷。 – 2010-05-27 04:06:25
供將來參考:RAND()只適用於mysql。 – Maerlyn 2010-05-27 05:09:30