探究獲得多個隨機結果的替代方案
雖然MySQL的ORDER BY RAND()函數提供了一種直接獲取隨機結果的方法,但在高效選擇多行隨機資料時卻顯得力不從心。本文將探討替代技術來優化此類查詢。
最佳化方案:利用索引列和子查詢
對於尋求隨機結果的查詢,最佳化效能至關重要。一種行之有效的創新方法是結合使用索引列和子查詢。透過將隨機化過程隔離到特定條件,這種技術顯著降低了處理開銷。
步驟:
範例:
考慮以下查詢:
<code class="language-sql">SELECT u.id, p.photo FROM users u, profiles p WHERE p.memberid = u.id AND p.photo != '' AND (u.ownership=1 OR u.stamp=1) ORDER BY RAND() LIMIT 18 </code>
最佳化後的查詢:
<code class="language-sql">SELECT g.* FROM table g JOIN (SELECT id FROM table WHERE RAND() < (SELECT ((4 / COUNT(*)) * 10) FROM table) ORDER BY RAND() LIMIT 4) AS z ON z.id= g.id</code>
優勢:
注意:
這種最佳化方法依賴子查詢和主查詢之間的一致性,以確保它們傳回準確的結果。此外,為隨機化結果的百分比選擇合理的限制有助於保持表現。
以上是如何在不使用 ORDER BY RAND() 的情況下從 MySQL 高效檢索多個隨機行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!