检索多行的更好方法是什么?
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
最佳答案
第一个版本从一个表中进行选择,因此要做的工作较少。
但是,如果第二个查询产生正确的答案,那么您必须使用其他两个表来建立 order_id 值列表以生成第一个语句,在这种情况下,聚合工作负载会更大,您将总的来说,使用第二个语句会更好。
一般情况下,让SQL优化器优化;它比你更擅长优化,并且当需要解决整个问题而不是问题的一部分时,它的效果最好。
(第二个选项通常会胜过第一个选项的总工作负载,因为 DBMS 不必将中间结果发送回客户端并解析和优化两个单独的语句。)
此外,第二条语句的结果集行大小要大得多(因为“*”覆盖了 3 个表而不是 1 个表的列)。这确实不是两个等效 SQL 语句的公平比较。
关于sql - mysql 查询与 select - where - in - join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1586025/