Anyone else experience this?
A developer just finished complaining about the performance of one of our databases. Well, he sent me the query and I couldn't understand why it was such a dog. Anyways I rewrote it. The execution plan is totally different between the two. I had no idea specifying the join made such a difference. First sql executed in 7 minutes that 2nd took 1 second.
SELECT
dbo.contract_co.producer_num_id, contract_co_status
FROM
dbo.contract_co,
dbo.v_contract_co_status
WHERE ( dbo.v_contract_co_status.contract_co_id = dbo.contract_co.contract_co_id )
AND contract_co_status = 'Pending'
OR ( contract_co_status = 'Active' and effective_date > '1/1/2004' )
SELECT
dbo.contract_co.producer_num_id, contract_co_status
FROM dbo.contract_co
INNER JOIN dbo.v_contract_co_status
ON dbo.contract_co.contract_co_id = dbo.v_contract_co_status.contract_co_id
WHERE contract_co_status = 'Pending'
OR ( contract_co_status = 'Active' and effective_date > '1/1/2004' )The two queries look like they will give different results, too. The first one appears to include a cartesian join. The OR in the where clause makes all the difference.|||Don't want to sound like a snob, but it's all due to the order of processing by QP:
1. JOIN
2. GROUP
3. WHERE
4. HAVING
By rewriting the old query you filtered out what the first query had to deal with while still trying to JOIN.|||actually, i believe it's
1. JOIN
2. WHERE
3. GROUP
4. HAVING
Showing posts with label complaining. Show all posts
Showing posts with label complaining. Show all posts
Friday, March 23, 2012
Interesting SQL...
Labels:
complaining,
database,
databases,
experience,
interesting,
microsoft,
mysql,
oracle,
performance,
query,
server,
sql
Subscribe to:
Posts (Atom)