sql >> Databasteknik >  >> RDS >> Sqlserver

Primär nyckelsortering

Data lagras fysiskt av klustrade index, vilket vanligtvis är den primära nyckeln men inte behöver vara det.

Data i SQL är inte garanterat att ha ordning utan en ORDER BY-klausul. Du bör alltid ange en ORDER BY-klausul när du behöver data i en viss ordning. Om tabellen redan är sorterad på det sättet kommer optimeraren inte att göra något extra arbete, så det är ingen skada att ha den där.

Utan en ORDER BY-sats kan RDBMS returnera cachade sidor som matchar din fråga medan den väntar på att poster ska läsas in från disken. I så fall, även om det finns ett index i tabellen, kanske data inte kommer in i indexets ordning. (Observera att detta bara är ett exempel - jag vet inte eller ens tror att ett RDBMS i verkligheten kommer att göra detta, men det är acceptabelt beteende för en SQL-implementering.)

REDIGERA

Om du har en prestandapåverkan när du sorterar jämfört med när du inte sorterar, sorterar du förmodligen på en kolumn (eller uppsättning kolumner) som inte har ett index (klustrade eller på annat sätt). Med tanke på att det är en tidsserie kanske du sorterar baserat på tid, men det klustrade indexet är på den primära bigint. SQL Server vet inte att båda ökar på samma sätt, så den måste ta till allt.

Om tidskolumnen och primärnyckelkolumnen är relaterade efter ordning (den ena ökar om och bara om den andra ökar eller förblir densamma), sortera istället efter primärnyckeln. Om de inte är relaterade på det här sättet, flytta det klustrade indexet från primärnyckeln till vilken eller vilka kolumner du sorterar efter.



  1. En lösning för:Markörer stöds inte i en tabell som har ett klustrat kolumnlagerindex

  2. Hur konstruerar jag en korsdatabasfråga i PHP?

  3. Släpps också indexen om du släpper en tabell i MySQL?

  4. Hur lägger man till en klient med JDBC för ClientDetailsServiceConfigurer på våren?