Omdat wanneer u VASTE waarden gebruikt met AUTO-PARAMETERISATIE uitgeschakeld, het queryplan PRECIES weet voor welke waarde het de query moet uitvoeren. Het plan is dus SPECIFIEK afgestemd op die waarden.
Wanneer u echter variabelen gebruikt, is het plan dat in de Query-cache wordt geplaatst, het plan dat de geparametriseerde variabelen bevat - die door elke willekeurige variabele kunnen worden vervangen en hetzelfde plan opnieuw zal gebruiken. Daarom zullen deze plannen robuuster en generieker moeten zijn om het "beste gemiddelde geval" aan te kunnen.
In SQL Server 2008 kunt u instellen of eenvoudige parameters al dan niet automatisch worden geparametriseerd, zodat u consistent het "beste gemiddelde geval" -plan krijgt - met al zijn goede en slechte eigenschappen.
Ref:
BEWERKEN - over prestaties
Wat de prestaties betreft, kan de optimizer het bij het verkeerde eind hebben - in dit geval keek het naar statistieken for the exact values
en vond dat de index niet nuttig is (kan een omslagpunt zijn), dus het plan is in plaats daarvan voor geclusterde scan. Het is een kunst om een queryplan te forceren - maar het is duidelijk dat het gebruik van een index 50% sneller is voor
- specifieke hardware
- specifiek tijdstip datadistributie
- specifieke waarden gegeven
Tenzij ik een heel goede reden had, zou ik de Query Optimizer niet spelen (bijvoorbeeld met behulp van indexhints), tenzij ik veel gegevens heb om te bewijzen dat het altijd sneller zal zijn.