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
Friday, March 23, 2012
Interesting SQL...
Labels:
complaining,
database,
databases,
experience,
interesting,
microsoft,
mysql,
oracle,
performance,
query,
server,
sql
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment