sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor vises der en slags i min udførelsesplan?

SQL Server har tre algoritmer at vælge imellem, når den skal forbinde to tabeller. The Nested-Loops-Join, Hash-Join og Sort-Merge-Join. Hvilken den vælger, er baseret på omkostningsoverslag. I dette tilfælde regnede det med, at baseret på den information, den havde tilgængelig, var en Sort-Merge-Join det rigtige valg.

I SQL Server-udførelsesplaner er en sortering-fletning opdelt i to operatorer, sorteringen og flet-sammenføjningen, fordi sorteringsoperationen måske ikke er nødvendig, for eksempel hvis dataene allerede er sorteret.

For mere information om joins, se min join-serie her:http://sqlity.net/en/1146/a-join-a-day-introduction/ Artiklen om Sort-Merg-Join er her:http://sqlity.net/da/1480/a-join-a-day-the-sort-merge-join/

For at gøre din forespørgsel hurtigere, ville jeg først se på indekser. Du har en masse klyngede indeksscanninger i forespørgslen. Hvis du kan erstatte et par af dem med søger, vil du højst sandsynligt være bedre af. Tjek også, om de estimater, som SQL Server producerer, stemmer overens med det faktiske rækkeantal i en faktisk eksekveringsplan. Hvis de er langt væk, træffer SQL Server ofte dårlige valg. Så at give bedre statistik kan også hjælpe dig med at søge efter ydeevne.



  1. Forespørgselsoptimering i PostgreSQL. FORKLAR Grundlæggende – Del 3

  2. Hvordan implementeres Oracles JDBC-forespørgselstimeout?

  3. Få nøjagtigt resultat for taldeling

  4. MySQL:Adgang nægtet for brugeren til databasen