【发布时间】:2012-04-20 17:47:51
【问题描述】:
我有一个相当大的数据集和一个需要两个连接的查询,所以查询的效率对我来说非常重要。我需要从数据库中检索 3 个满足基于连接结果的条件的随机行。 Most obvious solution 被指出效率低下 here,因为
[这些解决方案] 需要对所有表进行顺序扫描(因为需要计算与每一行关联的随机值 - 以便可以确定最小的值),即使是中等大小的表也可能会非常慢。
但是,那里的作者建议的方法(SELECT * FROM table WHERE num_value >= RAND() * (SELECT MAX(num_value) FROM table) LIMIT 1,其中 num_value 是 ID)对我不起作用,因为某些 ID 可能丢失(因为某些行可能已被用户删除)。
那么,在我的情况下,检索 3 个随机行的最有效方法是什么?
编辑: 解决方案不需要是纯 SQL。我也使用 PHP。
【问题讨论】:
-
这需要纯 SQL 还是您可以访问脚本语言?
-
如果您遗漏了一些 ID 值,并且无法知道哪些 ID 值,除了全部扫描,那么您必须全部扫描……所以这是最有效的方法。 (“逻辑!”):)
-
或者重试样本。哪个可能更快,……或者不是。