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

Primær nøglesortering

Data gemmes fysisk af et klynget indeks, som normalt er den primære nøgle, men ikke behøver at være det.

Data i SQL er ikke garanteret at have orden uden en ORDER BY-klausul. Du bør altid angive en ORDER BY-klausul, når du skal have dataene i en bestemt rækkefølge. Hvis tabellen allerede er sorteret på den måde, vil optimeringsværktøjet ikke udføre noget ekstra arbejde, så der er ingen skade i at have det der.

Uden en ORDER BY-klausul kan RDBMS returnere cachelagrede sider, der matcher din forespørgsel, mens den venter på, at poster bliver læst ind fra disken. I så fald, selvom der er et indeks på tabellen, kommer data muligvis ikke ind i indeksets rækkefølge. (Bemærk, at dette kun er et eksempel - jeg ved eller tror ikke, at et RDBMS i den virkelige verden vil gøre dette, men det er acceptabel adfærd for en SQL-implementering.)

REDIGER

Hvis du har en præstationspåvirkning, når du sorterer i forhold til, når du ikke sorterer, sorterer du sandsynligvis på en kolonne (eller et sæt af kolonner), der ikke har et indeks (grupperet eller andet). Da det er en tidsserie, sorterer du muligvis baseret på tid, men det klyngede indeks er på den primære bigint. SQL Server ved ikke, at begge stiger på samme måde, så den må ty til alt.

Hvis tidskolonnen og primærnøglekolonnen er relaterede efter rækkefølge (den ene øges, hvis og kun hvis den anden øges eller forbliver den samme), skal du sortere efter den primære nøgle i stedet. Hvis de ikke er relateret på denne måde, skal du flytte det klyngede indeks fra den primære nøgle til den eller de kolonner, du sorterer efter.



  1. MySQL flerkolonne primær nøgle

  2. MySQL:#1075 - Forkert tabeldefinition; autoincrement vs en anden nøgle?

  3. ) Operatør for begyndere

  4. Tilføjelse af en ny værdi til en eksisterende ENUM-type