Recently, I stirred up an interesting discussion on Twitter about the performance difference between using “OR” and “IN” in SQL queries. The varied responses led me to write a detailed blog post to clarify the correct answer. If you missed it, you can read it here. Let us see A Summary and Further Reading.
In a nutshell, we discovered that the performance of these two different types of SQL queries is, surprisingly, identical. This conclusion was reached by examining the statistics IO and execution plans for both queries, which were found to be the same.
The statistics IO for both queries showed identical results –
'Table SalesOrderHeader. Scan count 3, logical reads 24, physical reads 0.'
This indicates that SQL Server processes these queries similarly, irrespective of whether the “IN” or “OR” keyword is used.
However, remember that this is not an absolute rule. Depending on the complexity of your queries and your data structure, the SQL Server engine may not always optimize different queries to the same extent. Always test your queries’ performance and inspect their execution plans.
Photo courtesy: Brent Ozar
While we established no performance difference between using “OR” and “IN” in this context and example, my fellow SQL Server expert Brent Ozar took this discussion one step further. In his recent blog post, “What’s Faster: IN or OR? Columnstore Edition“, Brent explores whether using a column store index changes the answer to this question. He takes this performance comparison to the next level by altering the existing indexes, creating a clustered column store index on Sales.SalesOrderHeader, and then running the two queries.
I wholeheartedly recommend you read Brent’s post. His insights are always enlightening, and his ability to simplify complex SQL concepts is truly commendable. This post is no exception. Brent once again proves why he is one of the best in the SQL Server community, and I am always eager to learn from his expertise.
In conclusion, always remember that the SQL Server engine’s internals, particularly the query optimizer, play a significant role in the performance of queries. It interprets the intent of a query and chooses the most efficient execution plan, regardless of the specific SQL used.
You can always reach out to me on Twitter.
Reference: Pinal Dave (https://blog.sqlauthority.com)