我有一个相当大的数据集和一个需要两个连接的查询,所以查询的效率对我来说非常重要。我需要从数据库中检索 3 个满足基于连接结果的条件的随机行。最明显的解决方案在这里被指出是低效的,因为
[这些解决方案] 需要对所有表进行顺序扫描(因为需要计算与每一行关联的随机值 - 以便可以确定最小的值),即使是中等大小的表也可能会非常慢。
但是,那里的作者建议的方法(SELECT * FROM table WHERE num_value >= RAND() * (SELECT MAX(num_value) FROM table) LIMIT 1
其中 num_value 是 ID)对我不起作用,因为可能缺少某些 ID(因为某些行可能已被用户删除)。
那么,在我的情况下,检索 3 个随机行的最有效方法是什么?
编辑:解决方案不需要是纯 SQL。我也使用 PHP。