探究获取多个随机结果的替代方案
虽然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中文网其他相关文章!