Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Optimizing JOIN
Message
Information générale
Forum:
Microsoft SQL Server
Catégorie:
Syntaxe SQL
Titre:
Divers
Thread ID:
00833349
Message ID:
00833695
Vues:
27
Could you try something more like:
SELECT *
FROM Deceased
WHERE EXISTS (SELECT Zip FROM ZipCross WHERE Zip = Deceased.Zip AND EXISTS (SELECT AreaId FROM AreaOrder WHERE AreaId = ZipCross.AreaOrder AND CampaignId = 300))
or I have had some luck with breaking those into multiple smaller queries and indexing the temp tables like this:
SELECT AreaId 
INTO #Campaign
FROM AreaOrder 
WHERE CampaignId = 300

CREATE INDEX idxC on #Campaign (AreaId)

SELECT Zip 
INTO #ZipCross
FROM ZipCross 
WHERE Zip = Deceased.Zip AND EXISTS (SELECT AreaId FROM #Campaign WHERE AreaId = ZipCross.AreaId)

CREATE INDEX idxZ on #ZipCross (Zip)

SELECT *
FROM Deceased
WHERE EXISTS (SELECT Zip FROM #ZipCross WHERE Zip = Deceased.Zip)

DROP TABLE #ZipCross
DROP TABLE #Campaign
This way you can time each part of the whole query to see where you should be concentrating.

>>Also, look to the drives the data is stored on. Is the data on a seperate RAID array from the logs? Is this 5 minutes running from the server, or across the network?
>>
>>>First, I have a table called "Deceased" that holds over 6 million names and addresses of deceased persons. I need to do a JOIN on "ZipCross" table that holds all the zipcodes that were mailed for a particular direct mail campaign. Here is my SQL statement:
>>>
>>>SELECT Deceased.* FROM Deceased JOIN ZipCross ON Deceased.Zip=Zipcross.Zip
>>>JOIN AreaOrder C ON B.AreaID=C.AreaID AND C.CampaignID=300
>>>
>>>The problem is that this query takes almost 5 minutes to complete. Of course it doesn't help that the resulting recordset is over one million records. Anyone with ideas to make this query faster or am I doomed 'cause of amount of records returned? TIA.
Bill Mittenzwey
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform