sql >> Database >  >> RDS >> Sqlserver

Het gebruik van variabelen in een query genereert een ander queryplan

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

  1. specifieke hardware
  2. specifiek tijdstip datadistributie
  3. 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.




  1. Datums vergelijken die zijn opgeslagen als varchar

  2. Hoe haal ik decimalen op bij het afronden van een gemiddelde in SQL?

  3. REGEXP gebruiken in een door mysqli voorbereide verklaring in PHP

  4. Resultaten opnemen die gelijk zijn voor de laatste plaats bij gebruik van de TOP-clausule in SQL Server