Eerste Run
de query
van Sql Server Management Studio
en kijk naar het queryplan om te zien waar de bottleneck zit. Elke plaats waar u een "tabelscan" of "indexscan" ziet, moet door alle gegevens gaan om te vinden wat het zoekt. Als u geschikte indexen maakt die voor deze bewerkingen kunnen worden gebruikt, zou dit de prestaties moeten verbeteren.
Hieronder vindt u enkele tips voor het verbeteren van de prestaties van sql-query's..
Vermijd meerdere joins in een enkele zoekopdracht
Probeer te voorkomen dat u een SQL-query schrijft met meerdere joins die outer joins, cross-apply, outer apply en andere complexe subquery's bevatten. Het vermindert de keuzes voor Optimizer om de join-volgorde en het join-type te bepalen. Soms wordt Optimizer gedwongen om geneste lus-joins te gebruiken, ongeacht de prestatieconsequenties voor query's met te complexe kruistoepassing of subquery's.
Verwijder cursors uit de zoekopdracht Probeer cursors uit de query te verwijderen en gebruik een op sets gebaseerde query; op een set gebaseerde query is efficiënter dan op basis van een cursor. Als het nodig is om cursor te gebruiken, vermijd dan dynamische cursors, omdat dit de keuze aan beschikbare plannen voor de query-optimizer beperkt. Dynamische cursor beperkt de optimalisatie bijvoorbeeld tot het gebruik van geneste lus-joins.
Vermijd het gebruik van niet-gecorreleerde scalaire subquery U kunt uw query herschrijven om niet-gecorreleerde scalaire subquery's te verwijderen als een afzonderlijke query in plaats van een deel van de hoofdquery en de uitvoer opslaan in een variabele waarnaar kan worden verwezen in de hoofdquery of een later deel van de batch. Dit geeft Optimizer betere opties, wat kan helpen om nauwkeurige kardinaliteitsschattingen te retourneren, samen met een beter plan.
Vermijd Multi-statement Table Valued Functions (TVF's) Multi-statement TVF's zijn duurder dan inline TFV's. SQL Server breidt inline TFV's uit naar de hoofdquery zoals het weergaven uitbreidt, maar evalueert multi-statement TVF's in een andere context dan de hoofdquery en materialiseert de resultaten van multi-statement in tijdelijke werktabellen. De aparte context en werktabel maken multi-statement TVF's kostbaar.
Maak een zeer selectieve index Selectiviteit definieert het percentage kwalificerende rijen in de tabel (gekwalificeerd aantal rijen/totaal aantal rijen). Als de verhouding tussen het kwalificerende aantal rijen en het totale aantal rijen laag is, is de index zeer selectief en het meest bruikbaar. Een niet-geclusterde index is het nuttigst als de verhouding rond de 5% of minder is, wat betekent dat als de index 95% van de rijen buiten beschouwing kan laten. Als index meer dan 5% van de rijen in een tabel retourneert, wordt deze waarschijnlijk niet gebruikt; of er wordt een andere index gekozen of gemaakt, of de tabel wordt gescand.
Plaats een kolom in een index De volgorde of positie van een kolom in een index speelt ook een cruciale rol om de prestaties van SQL-query's te verbeteren. Een index kan helpen om de prestaties van de SQL-query te verbeteren als de criteria van de query overeenkomen met de kolommen die het meest in de indexsleutel staan. Als best practice moeten de meeste selectieve kolommen uiterst links in de sleutel van een niet-geclusterde index worden geplaatst.
Verwijder ongebruikte indexen Door ongebruikte indexen te verwijderen, kunnen gegevenswijzigingen worden versneld zonder het ophalen van gegevens te beïnvloeden. U moet ook een strategie definiëren voor batchprocessen die niet vaak worden uitgevoerd en bepaalde indexen gebruiken. In dergelijke gevallen helpt het maken van indexen voorafgaand aan batchprocessen en deze vervolgens te laten vallen wanneer de batchprocessen zijn voltooid, de overhead op de database te verminderen.
Statistieken en updates maken U moet zorgen voor het maken van statistieken en regelmatige updates voor berekende kolommen en meerdere kolommen waarnaar in de query wordt verwezen; de query-optimizer gebruikt informatie over de verdeling van waarden in een of meer kolommen van een tabelstatistieken om de kardinaliteit, of het aantal rijen, in het queryresultaat te schatten. Met deze kardinaliteitsschattingen kan de query-optimizer een kwalitatief hoogstaand queryplan maken.
Bekijk uw schemadefinities opnieuw Last but not least, kijk nog eens naar uw schemadefinities; let erop dat de juiste FORIGEN KEY, NOT NULL en CEHCK-beperkingen al dan niet aanwezig zijn. Beschikbaarheid van de juiste beperking op de juiste plaats helpt altijd om de queryprestaties te verbeteren, zoals FORIGEN KEY constraint helpt om joins te vereenvoudigen door sommige buitenste of semi-joins om te zetten in binnenste joins en CHECK-beperking helpt ook een beetje door onnodige of overbodige predikaten te verwijderen.