Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does Sql JOIN order affect performance?

Tags:

sql

sql-server

People also ask

Does the order of joins affect performance?

Basically, join order DOES matter because if we can join two tables that will reduce the number of rows needed to be processed by subsequent steps, then our performance will improve.

Does the ordering of joins matter?

1 Answer. The order doesn't matter for INNER joins. As long as you change your selects from SELECT * to SELECT a.

Does order of inner joins matter for performance?

JOIN order doesn't matter, the query engine will reorganize their order based on statistics for indexes and other stuff.

Does the order of join columns matter?

No, it doesn't matter. SQL is declarative, not procedural, so the order shouldn't matter.


Join order in SQL2008R2 server does unquestionably affect query performance, particularly in queries where there are a large number of table joins with where clauses applied against multiple tables.

Although the join order is changed in optimisation, the optimiser does't try all possible join orders. It stops when it finds what it considers a workable solution as the very act of optimisation uses precious resources.

We have seen queries that were performing like dogs (1min + execution time) come down to sub second performance just by changing the order of the join expressions. Please note however that these are queries with 12 to 20 joins and where clauses on several of the tables.

The trick is to set your order to help the query optimiser figure out what makes sense. You can use Force Order but that can be too rigid. Try to make sure that your join order starts with the tables where the will reduce data most through where clauses.


No, the JOIN by order is changed during optimization.

The only caveat is the Option FORCE ORDER which will force joins to happen in the exact order you have them specified.


I have a clear example of inner join affecting performance. It is a simple join between two tables. One had 50+ million records, the other has 2,000. If I select from the smaller table and join the larger it takes 5+ minutes.

If I select from the larger table and join the smaller it takes 2 min 30 seconds.

This is with SQL Server 2012.

To me this is counter intuitive since I am using the largest dataset for the initial query.


JOIN order doesn't matter, the query engine will reorganize their order based on statistics for indexes and other stuff.

For test do the following:

  • select show actual execution plan and run first query
  • change JOIN order and now run the query again
  • compare execution plans

They should be identical as the query engine will reorganize them according to other factors.

As commented on other asnwer, you could use OPTION (FORCE ORDER) to use exactly the order you want but maybe it would not be the most efficient one.

AS a general rule of thumb, JOIN order should be with table of least records on top, and most records last, as some DBMS engines the order can make a difference, as well as if the FORCE ORDER command was used to help limit the results.


Usually not. I'm not 100% this applies verbatim to Sql-Server, but in Postgres the query planner reserves the right to reorder the inner joins as it sees fit. The exception is when you reach a threshold beyond which it's too expensive to investigate changing their order.