Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Same Query, Different Performance with Variables
Message
Information générale
Forum:
Microsoft SQL Server
Catégorie:
Syntaxe SQL
Titre:
Same Query, Different Performance with Variables
Versions des environnements
SQL Server:
SQL Server 2008
Application:
Web
Divers
Thread ID:
01509595
Message ID:
01509595
Vues:
100
I've written a query with several nested joins to check status of records being transferred successfully to archive tables. It looks something like this:
SELECT maintable.pk
		,a.rcount
		,b.rcount
		,c.rcount
		,d.rcount
		,e.rcount
		,f.rcount
	from maintable
		left join (select COUNT(*) as rcount from childtable1 where pk=12345) as a on 1=1
		left join (select COUNT(*) as rcount from childtable2 where pk=12345) as b on 1=1
		left join (select COUNT(*) as rcount from childtable3 where pk=12345) as c on 1=1
		left join (select COUNT(*) as rcount from childtable4 where pk=12345) as d on 1=1
		left join (select COUNT(*) as rcount from childtable5 where pk=12345) as e on 1=1
		left join (select COUNT(*) as rcount from childtable6 where pk=12345) as f on 1=1
	where maintable.pk=12345
this works fine and runs instantly.

If I change it to a variable like:
DECLARE @lnPK as int=12345
SELECT maintable.pk
		,a.rcount
		,b.rcount
		,c.rcount
		,d.rcount
		,e.rcount
		,f.rcount
	from maintable
		left join (select COUNT(*) as rcount from childtable1 where pk=@lnPK) as a on 1=1
		left join (select COUNT(*) as rcount from childtable2 where pk=@lnPK) as b on 1=1
		left join (select COUNT(*) as rcount from childtable3 where pk=@lnPK) as c on 1=1
		left join (select COUNT(*) as rcount from childtable4 where pk=@lnPK) as d on 1=1
		left join (select COUNT(*) as rcount from childtable5 where pk=@lnPK) as e on 1=1
		left join (select COUNT(*) as rcount from childtable6 where pk=@lnPK) as f on 1=1
	where maintable.pk=@lnPK
Performance goes to hell. It takes 45 seconds to complete and the execution plan is completely different.

What's going on here? Is there a better way to do this with a variable?
Brandon Harker
Sebae Data Solutions
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform