MySQL 的ORDER BY RAND() 函數如何運作
MySQL 的ORDER BY RAND() 函數產生看似隨機的結果,但其實際機制有所不同來自普遍持有的信念。與假設相反,MySQL 沒有加入影響排序的隨機值欄位。相反,它採用以下過程:
意外的執行時間
提供的測試查詢顯示了意外的執行時間:
Query | Execution Time |
---|---|
SELECT * FROM table ORDER BY RAND() LIMIT 1 | 30-40 seconds |
SELECT id FROM table ORDER BY RAND() LIMIT 1 | 0.25 seconds |
SELECT id, username FROM table ORDER BY RAND() LIMIT 1 | 90 seconds |
執行時間的這種變化歸因於每個查詢檢索的不同資料。與僅檢索特定列 (id) 或取得已索引的資料 (id) 相比,選擇整行 (*) 會產生更高的成本。
快速隨機選擇的替代方法
雖然ORDER BY RAND() 可能無法提供最佳效能,但替代方法可以提供更快的結果:
以上是MySQL 的 ORDER BY RAND() 函數實際上是如何運作的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!