SQL加入表演操作顺序

SQL join performance operation order

我正在尝试想出如何订购连接查询以提高其性能。

假设我们有两个表要连接,必须对其应用一些过滤器。

是不是一样做:

table1_result = select * from table1 where field1 = 'A';
table2_result = select * from table2 where field1 = 'A';

result = select * from table1 as one inner join table2 as two on one.field1 = two.field1;

这样做:

result = select * from table1 as one inner join table2 as two on one.field1 = two.field1
            where one.field1 = 'A' and two.field1 = 'A';

甚至这样做:

result = select * from table1 as one inner join table2 as two on one.field1 = two.field1 and one.field1 = 'A';

非常感谢!!

此处提供了一些改进查询的常用优化技术:

  • Index 连接中使用的列。如果它们是 foreign keys,通常像 MySql 这样的数据库已经为它们建立了索引。
  • Index columns 用于 conditionsWHERE 子句。
  • 避免 * 并明确 select 您真正需要的列。
  • 在大多数情况下,加入的顺序无关紧要,因为 DB-Engines 足够聪明,可以做出决定。

所以最好分析一下你的两个连接表的结构,有适当的索引。

如果有人进一步感兴趣,更改 conditions 顺序如何帮助获得更好的性能。我在这里 .

有一个详细的答案