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
用于 conditions
或 WHERE
子句。
- 避免
*
并明确 select 您真正需要的列。
- 在大多数情况下,加入的顺序无关紧要,因为
DB-Engines
足够聪明,可以做出决定。
所以最好分析一下你的两个连接表的结构,有适当的索引。
如果有人进一步感兴趣,更改 conditions
顺序如何帮助获得更好的性能。我在这里 .
有一个详细的答案
我正在尝试想出如何订购连接查询以提高其性能。
假设我们有两个表要连接,必须对其应用一些过滤器。
是不是一样做:
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
用于conditions
或WHERE
子句。- 避免
*
并明确 select 您真正需要的列。 - 在大多数情况下,加入的顺序无关紧要,因为
DB-Engines
足够聪明,可以做出决定。
所以最好分析一下你的两个连接表的结构,有适当的索引。
如果有人进一步感兴趣,更改 conditions
顺序如何帮助获得更好的性能。我在这里