哪种方法可以更好地检索多行?
select *
from order_details
where order_id in (1,2,3, ... .... )
...或:
select *
from order_details
INNER JOIN orders on orders.id = order_details.order_id
INNER JOIN customers on customers.id = orders.customer_id
where customers.id = 3
答案 0 :(得分:3)
第一个版本从一个表中选择,因此工作量较少。
但是,如果第二个查询产生正确的答案,那么你必须与其他两个表一起工作以建立order_id值列表以生成第一个语句,在这种情况下,聚合工作量更大,你会最好总体上使用第二个陈述。
一般情况下,让SQL优化器进行优化;优化比你更好,并且在解决整个问题而不是解决问题的时候效果最好。
(第二个选项通常会超过第一个选项的总工作负载,只是因为DBMS不必将中间结果发送回客户端并解析和优化两个单独的语句。)
此外,第二个语句的结果集的行大小要大得多(因为'*'涵盖了3个表而不是1个表中的列)。这实际上不是两个等价的SQL语句的公平比较。
答案 1 :(得分:0)
我建议尝试两者并做基准测试。因为它可以依赖于索引,列大小和行数。
不应该很难,因为例如phpMyAdmin显示每个查询的执行时间。