Complexe SQL-query's zijn uitstekend geschikt om databasezoekopdrachten zeer specifiek en flexibel te maken, maar ze kunnen ook moeilijk te begrijpen en bijna onmogelijk te debuggen zijn - en u kunt net zo goed vergeten ze opnieuw te gebruiken.
Wanneer query's verder gaan dan uw standaard SELECT- en WHERE-opdrachten, kunt u zelfs merken dat de prestaties van SQL Server eronder lijden omdat query-optimizers moeite hebben met het verwerken van lange, complexe query's.
Als u merkt dat uw SQL-query's een buitensporig aantal complexe joins en subquery's gebruiken, query's nesten in WHERE-clausules en vertrouwen op veel AND- en OR-clausules, is het waarschijnlijk een goed moment om een stap terug te doen en te zoeken naar manieren om minimaliseer een deel van de complexiteit.
Tips om de complexiteit van SQL Server-query's te minimaliseren
Zoals we hierboven vermeldden, houden SQL Server-query-optimizers niet van complexe SQL-query's. Hier zijn vijf manieren om uw zoekopdrachten minder complex te maken, zodat ze kunnen worden geoptimaliseerd voor betere prestaties.
1. Elimineer OR-clausules indien mogelijk
De eenvoudigste manier om query's minder complex te maken, is door OR-clausules waar mogelijk te elimineren. Omdat OR inclusief is, moet SQL Server elk onderdeel van de clausule afzonderlijk verwerken, wat de bewerkingen echt vertraagt.
Als het niet mogelijk is om OR te verwijderen, is de beste optie om lange, complexe zoekopdrachten op te splitsen in kleinere. Het lijkt een beetje contra-intuïtief dat het verwerken van meer zoekopdrachten sneller is dan het verwerken van één, maar als het op OR aankomt, kun je beter met meerdere zoekopdrachten werken.
2. Verfijn zoekopdrachten naar strings
SQL Server doet veel dingen goed, maar zoeken op fuzzy strings is daar niet een van. Zoekopdrachten met jokertekens, vooral bij grote tabellen, zijn inefficiënt en slecht voor de prestaties.
Er zijn een paar tweaks die u kunt toepassen op string-zoekopdrachten die de impact op de prestaties helpen minimaliseren.
- Gebruik een zoekopdracht met een leidende tekenreeks in plaats van een zoekopdracht met jokertekens (d.w.z. verander "%For%" in "For%")
- Pas filters zoals datum of tijd toe op de zoekopdracht om de gegevens te verkleinen voordat u de tekenreekszoekopdracht uitvoert
- Pas full-text indexering toe om indexen te genereren die flexibel zoeken naar strings op tekstkolommen mogelijk maken
3. Pas op voor grote schrijfbewerkingen
Grote schrijfbewerkingen veroorzaken onenigheid en genereren veel logbestanden. Als ze niet worden aangevinkt, kunnen grote schrijfbewerkingen bronnen van gebruikers blokkeren en latentieproblemen veroorzaken, evenals transactielogboeken of zelfs fysieke opslag vullen.
Omdat u grote schrijfbewerkingen niet altijd kunt vermijden, moet u zich bewust zijn van wanneer u ze uitvoert (hoe minder druk de server, hoe beter) of het aantal rijen dat per bewerking wordt gewijzigd, verminderen om het risico op geschillen te minimaliseren.
4. Indexen opschonen
Indexen zijn een van de grootste boosdoeners als het gaat om slechte prestaties, maar wanneer u complexe SQL-query's probeert te optimaliseren, vereisen indexen enkele speciale overwegingen.
SQL Server heeft verschillende hulpprogramma's die u laten weten wanneer ontbrekende indexen de queryprestaties beïnvloeden. Maar voordat u inspringt en indexen gaat toevoegen, moet u bepalen of de extra index de zoekopdracht voldoende zal verbeteren om het de moeite waard te maken. Als de zoekopdracht bijvoorbeeld 1 miljoen keer per dag wordt uitgevoerd en de index verbetert deze met 25 procent, dan is het waarschijnlijk de moeite waard. Als de query zelden wordt gebruikt, heeft deze mogelijk geen zin.
Een paar andere dingen die u moet overwegen voordat u indexen gaat toevoegen, zijn of bestaande indexen kunnen worden aangepast om deze use case te dekken zonder een nieuwe toe te voegen en of deze index al bestaat, maar de optimizer negeert deze om de een of andere reden.
Andere manieren waarop indexen de prestaties van query's kunnen beïnvloeden, zijn over- of onderindexering van tabellen en tabellen die geen geclusterde index of primaire sleutel hebben. Het oplossen van deze problemen helpt bij het uitvoeren van complexe SQL-query's.
5. Houd de tafel aftellen
Elke keer dat u een tabel aan een query toevoegt, wordt de query complexer. Overmatige tabellen resulteren vaak in slechte uitvoeringsplannen omdat de query-optimizer niet efficiënt kan werken.
Als u merkt dat een complexe query slecht presteert en veel tabellen heeft, kan dit een van die momenten zijn waarop het opsplitsen van de query in kleinere query's de beste keuze is, omdat dit een deel van de last van de optimizer verlicht.
Hulpprogramma's voor het afstemmen van prestaties kunnen de complexiteit van SQL Server helpen minimaliseren
Wanneer complexe query's de query-optimizer vastlopen, eindigt u vaak met een inefficiënt uitvoeringsplan en lijden de prestaties eronder. Naast de bovenstaande tips zijn hulpprogramma's voor het afstemmen van prestaties een waardevolle hulpbron om de complexiteit van SQL Server-query's te minimaliseren en de prestaties te optimaliseren.
Hieronder vindt u een aantal mogelijkheden waar u op moet letten bij het onderzoeken van oplossingen voor het afstemmen van prestaties.
Analyse uitvoeringsplan SQL Server
De afstemmingstool moet uw uitvoeringsplan analyseren en bepalen wat er moet veranderen zodat SQL Server de bewerkingen efficiënter kan uitvoeren.
SQL Server Uitvoering Plan Visualisatie
De afstemmingstool moet het uitvoeringsplan presenteren op een manier die gemakkelijk te begrijpen is en u helpt bij het lokaliseren van de bewerkingen die de uitvoering vertragen.
Geautomatiseerde SQL-optimalisatie
De afstemmingstool moet uw SQL analyseren en deze vervolgens automatisch herschrijven totdat de maximale uitvoeringstijdverbetering bereikt is.
Vergelijking van geoptimaliseerde en originele SQL-statements
De afstemmingstool moet wijzigingen in de SQL-instructie markeren, zodat u de originele en geoptimaliseerde versies kunt vergelijken voordat u wijzigingen implementeert.
Vergelijking van uitvoeringsplannen voor SQL Server
De afstemmingstools moeten een vergelijking bieden tussen de originele en geoptimaliseerde uitvoeringsplannen, zodat u weet wat er tussen versies is veranderd.
Statistisch bewijs
Uw afstemmingstool moet gegevens leveren die aantonen waarom de geoptimaliseerde SQL sneller wordt uitgevoerd dan de oorspronkelijke SQL-instructie.
Complexe SQL Server-query's kunnen een negatieve invloed hebben op de systeemprestaties. Gebruik deze tips en een hoogwaardige oplossing voor het afstemmen van prestaties om de complexiteit op te ruimen en de efficiëntie van uw SQL-query's te optimaliseren.