选择mysql查询 - where - in - join

时间:2009-10-18 21:01:46

标签: sql mysql query-optimization

哪种方法可以更好地检索多行?

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

2 个答案:

答案 0 :(得分:3)

第一个版本从一个表中选择,因此工作量较少。

但是,如果第二个查询产生正确的答案,那么你必须与其他两个表一起工作以建立order_id值列表以生成第一个语句,在这种情况下,聚合工作量更大,你会最好总体上使用第二个陈述。

一般情况下,让SQL优化器进行优化;优化比你更好,并且在解决整个问题而不是解决问题的时候效果最好。

(第二个选项通常会超过第一个选项的总工作负载,只是因为DBMS不必将中间结果发送回客户端并解析和优化两个单独的语句。)

此外,第二个语句的结果集的行大小要大得多(因为'*'涵盖了3个表而不是1个表中的列)。这实际上不是两个等价的SQL语句的公平比较。

答案 1 :(得分:0)

我建议尝试两者并做基准测试。因为它可以依赖于索引,列大小和行数。

不应该很难,因为例如phpMyAdmin显示每个查询的执行时间。