sql - mysql 查询与 select - where - in - join

标签 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

最佳答案

第一个版本从一个表中进行选择,因此要做的工作较少。

但是,如果第二个查询产生正确的答案,那么您必须使用其他两个表来建立 order_id 值列表以生成第一个语句,在这种情况下,聚合工作负载会更大,您将总的来说,使用第二个语句会更好。

一般情况下,让SQL优化器优化;它比你更擅长优化,并且当需要解决整个问题而不是问题的一部分时,它的效果最好。

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

此外,第二条语句的结果集行大小要大得多(因为“*”覆盖了 3 个表而不是 1 个表的列)。这确实不是两个等效 SQL 语句的公平比较。

关于sql - mysql 查询与 select - where - in - join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1586025/

相关文章:

sql - 是否可以实现真正的一对一关系?

MySQL日期转换

mysql - 在具有不同字符集的两个 MySQL 之间迁移数据,搞砸了 utf8

javascript - 下拉选择->搜索数据库

mysql - blob 列上的慢查询分组

sql-server - 查询计划优化器是否适用于连接/过滤的表值函数?

sql - 如何检查我的模式中是否存在序列?

sql - MS SQL 选择表

python - 将查询结果附加到 PostgreSQL 中的同一结果行 - Redshift

sql - 如何优化 Django 生成的这个非常慢的查询?