Query optimization in SQL Server -
select t2.entity1id, t1.entity1id t1 full outer join t2 on t1.c2 = t2.c2 , t1.c1 = t2.c1 , t1.c3 = 1 ((t1.c1 = 123 ) or (t2.c1 = 123)) , (t1.c3 = 1 or t1.c3 null)
above query taking 12 seconds in sql server 2014, idea tune query? there indexes on c1,c2,c3 columns.
observation: in above query, when remove condition or (i.e.
select t2.entity1id, t1.entity1id t1 full outer join t2 on t1.c2 = t2.c2 , t1.c1 = t2.c1 , t1.c3 = 1 (t1.c1 = 123) , (t1.c3 = 1 or t1.c3 null)
then it's returning results in 0 seconds.
each table has around 500'000 records.
first, final condition (t1.c3 = 1 or t1.c3 null)
redundant. given join
condition, these possible values. so, query is:
select t2.entity1id, t1.entity1id t1 full outer join t2 on t1.c2 = t2.c2 , t1.c1 = t2.c1 , t1.c3 = 1 (t1.c1 = 123 ) or (t2.c1 = 123)
if doesn't have performance, consider breaking 2 queries:
select t2.entity1id, t1.entity1id t1 left join t2 on t1.c2 = t2.c2 , t1.c1 = t2.c1 , t1.c3 = 1 t1.c1 = 123 union select t2.entity1id, t1.entity1id t2 left join t1 on t1.c2 = t2.c2 , t1.c1 = t2.c1 , t1.c3 = 1 t2.c1 = 123
sometimes, optimization of separate subqueries better optimization full outer join
.
Comments
Post a Comment