Jun 21, 2010 8:49 AM
SQL query is taking long time whit OR in WHERE clouse
-
Like (0)
Hi,
why is this query
SELECT A.LETO_EFT,
B.KONSOLIDIRANA_DAVCNA_ST,
SUM(A.KOMAD_ZAVAROVANJA) ST_KOMADOV_ZAVAROVANJ
FROM DIM..OSEBE B, POL_SNP..CRM A
WHERE ( B.OSEBA_ID = A.PRVI_ZAVAROVANEC_ID OR
B.OSEBA_ID = A.SKLENITELJ_ZAVAROVANJA_ID )
AND B.KONSOLIDIRANA_DAVCNA_ST IS NOT NULL
GROUP BY A.LETO_EFT, B.KONSOLIDIRANA_DAVCNA_ST;
taking so long (VERY LONG) versus this one:
SELECT A.LETO_EFT,
B.KONSOLIDIRANA_DAVCNA_ST,
SUM(A.KOMAD_ZAVAROVANJA) ST_KOMADOV_ZAVAROVANJ
FROM DIM..OSEBE B, POL_SNP..CRM A
WHERE ( B.OSEBA_ID = A.PRVI_ZAVAROVANEC_ID )
AND B.KONSOLIDIRANA_DAVCNA_ST IS NOT NULL
GROUP BY A.LETO_EFT, B.KONSOLIDIRANA_DAVCNA_ST
union
SELECT A.LETO_EFT,
B.KONSOLIDIRANA_DAVCNA_ST,
SUM(A.KOMAD_ZAVAROVANJA) ST_KOMADOV_ZAVAROVANJ
FROM DIM..OSEBE B, POL_SNP..CRM A
WHERE ( B.OSEBA_ID = A.SKLENITELJ_ZAVAROVANJA_ID )
AND B.KONSOLIDIRANA_DAVCNA_ST IS NOT NULL
GROUP BY A.LETO_EFT, B.KONSOLIDIRANA_DAVCNA_ST;
Hello Darko,
Can you post plan file for both queries?
I've seen a query with OR clause problem, but that was due to paranthesis was not used by user.
plan file would reveal more on this.
Thanks,Bhasker
The reason is because such joins cannot be processed as hash joins. They are instead processed as nested loop joins or expression join by NPS server.
The solution is to re-write the query and it looks like you already have a re-write that is working so if it is giving you the expected results, use it instead.
James.
still it would help to look into plan files.

