sql >> Database teknologi >  >> Database Tools >> SSMS

Mulige trin til at forbedre SQL Server-forespørgselsydeevne

Første Run query fra Sql Server Management Studio og se på forespørgselsplanen for at se, hvor flaskehalsen er. Ethvert sted, du ser en "tabelscanning" eller "indeksscanning", skal den gennemgå alle data for at finde det, den leder efter. Hvis du opretter passende indekser, der kan bruges til disse operationer, bør det øge ydeevnen.

Nedenfor er nogle tips til at forbedre ydeevnen af ​​sql-forespørgsler..

Undgå flere sammenføjninger i en enkelt forespørgsel

Prøv at undgå at skrive en SQL-forespørgsel ved hjælp af multiple joins, der inkluderer outer joins, cross application, outer application og andre komplekse underforespørgsler. Det reducerer valgmulighederne for Optimizer til at bestemme rækkefølgen og jointypen. Nogle gange er Optimizer tvunget til at bruge indlejrede loop joins, uanset ydeevnekonsekvenserne for forespørgsler med alt for komplekse krydsanvendelse eller underforespørgsler.

Fjern markører fra forespørgslen Prøv at fjerne markører fra forespørgslen og brug sæt-baseret forespørgsel; sætbaseret forespørgsel er mere effektiv end markørbaseret. Hvis der er behov for at bruge markøren, så undgå dynamiske markører, da det har en tendens til at begrænse valget af planer, der er tilgængelige for forespørgselsoptimeringsværktøjet. For eksempel begrænser dynamisk markør optimeringsværktøjet til at bruge indlejrede loop-sammenføjninger.

Undgå brug af ikke-korreleret skalær underforespørgsel Du kan omskrive din forespørgsel for at fjerne ikke-korreleret skalær underforespørgsel som en separat forespørgsel i stedet for en del af hovedforespørgslen og gemme outputtet i en variabel, som kan henvises til i hovedforespørgslen eller senere del af batchen. Dette vil give bedre muligheder for Optimizer, som kan hjælpe med at returnere nøjagtige kardinalitetsestimater sammen med en bedre plan.

Undgå Multi-statement Table Valued Functions (TVF'er) Multi-statement TVF'er er dyrere end inline TFV'er. SQL Server udvider inline TFV'er til hovedforespørgslen, ligesom den udvider visninger, men evaluerer TVF'er med flere sætninger i en separat kontekst fra hovedforespørgslen og materialiserer resultaterne af multi-sætninger til midlertidige arbejdstabeller. Den separate kontekst og arbejdstabel gør TVF'er med flere sætninger dyre.

Opret et meget selektivt indeks Selektivitet definerer procentdelen af ​​kvalificerende rækker i tabellen (kvalificerende antal rækker/samlet antal rækker). Hvis forholdet mellem det kvalificerende antal rækker og det samlede antal rækker er lavt, er indekset meget selektivt og mest nyttigt. Et ikke-klynget indeks er mest nyttigt, hvis forholdet er omkring 5 % eller mindre, hvilket betyder, at indekset kan fjerne 95 % af rækkerne fra overvejelse. Hvis indekset returnerer mere end 5% af rækkerne i en tabel, vil det sandsynligvis ikke blive brugt; enten vil et andet indeks blive valgt eller oprettet, eller også vil tabellen blive scannet.

Placer en kolonne i et indeks Rækkefølgen eller placeringen af ​​en kolonne i et indeks spiller også en afgørende rolle for at forbedre SQL-forespørgselsydeevnen. Et indeks kan hjælpe med at forbedre SQL-forespørgselsydeevnen, hvis kriterierne for forespørgslen matcher de kolonner, der er mest tilbage i indeksnøglen. Som en bedste praksis bør de fleste selektive kolonner placeres længst til venstre i nøglen til et ikke-klynget indeks.

Drop ubrugte indekser At droppe ubrugte indekser kan hjælpe med at fremskynde dataændringer uden at påvirke datahentning. Du skal også definere en strategi for batch-processer, der kører sjældent og bruger bestemte indekser. I sådanne tilfælde hjælper oprettelse af indekser forud for batchprocesser og derefter at droppe dem, når batchprocesserne er færdige, med at reducere overhead på databasen.

Oprettelse og opdateringer af statistik Du skal sørge for statistikoprettelse og regelmæssige opdateringer for beregnede kolonner og multikolonner, der henvises til i forespørgslen; forespørgselsoptimeringsværktøjet bruger information om fordelingen af ​​værdier i en eller flere kolonner i en tabelstatistik til at estimere kardinaliteten eller antallet af rækker i forespørgselsresultatet. Disse kardinalitetsestimater gør det muligt for forespørgselsoptimeringsværktøjet at oprette en forespørgselsplan af høj kvalitet.

Se dine skemadefinitioner igen Sidst men ikke mindst, gense dine skemadefinitioner; hold øje med, at passende FORIGEN KEY, NOT NULL og CEHCK-begrænsninger er på plads eller ej. Tilgængeligheden af ​​den rigtige begrænsning på det rigtige sted hjælper altid med at forbedre forespørgselsydeevnen, ligesom FORIGEN KEY begrænsning hjælper med at forenkle joinforbindelser ved at konvertere nogle ydre eller semi-joins til indre joinforbindelser og CHECK-begrænsning hjælper også lidt ved at fjerne unødvendige eller overflødige prædikater.

Reference




  1. Laravel 7X admin/login går tilbage til admin/login trods korrekte legitimationsoplysninger

  2. phpmyadmin mysql fremmed nøgle

  3. DBeaver Twitter

  4. mysql-forespørgsel viser forkert resultat