sql >> Databasteknik >  >> RDS >> Sqlserver

Varför tar den här SQL-satsen (med 2 tabellkopplingar) 5 minuter att slutföra?

Det här stämmer inte.

Jag har två möjligheter:

1) Statistiken är inaktuell på tabellerna. Bygg om index och uppdatera statistik.

2) Som du sa, Geografitabellsposter är stora och sträcker sig över många sidor (inte den där posten som spänner över flera sidor eftersom den inte kan, men posten är nära 8K-märket). I det här fallet, lustigt nog, kan det hjälpa att skapa ytterligare ett icke-klustrat index på det klustrade indexet.

UPPDATERA

Jag är glad att det har fungerat. Nu lite förklaring.

Först och främst, om något inte riktigt stämmer och genomförandeplanen ser konstig ut, titta alltid på statistik och bygga om index.

Att skapa ett icke-klustrat index för det klustrade indexet bör vanligtvis inte ge någon fördel, men när tabellen har många poster och posten är nära sin 8K-gräns är det till hjälp. Som du vet laddar SQL när den går till disken för att ladda en post, den laddar en 8K-sida. På ett liknande sätt kommer det att ladda en 8K-sida när du går till index. Nu när index är ett 4-byte heltal betyder det att ID laddas för 2000 poster medan det kommer att ladda en handfull poster om det använder klustrade index (kom ihåg att allt vi behöver är ID för JOIN-biten). Nu eftersom det här är en binär sökning, förväntar jag mig inte att det bara kommer att hjälpa en stor bit. Så det kanske är något annat som inte stämmer, men svårt att gissa om man inte sett systemet.



  1. Kommer detta att lagras på sidan?

  2. Hur tar jag en DISTINCT ON-underfråga som är sorterad efter en separat kolumn och gör den snabb?

  3. Spela ramverk 2.0 JPA Mysql-fel:Det går inte att bygga EntityManagerFactory

  4. Hur man ändrar en tabell för identitetsspecifikation är identitet SQL Server