sql >> Database >  >> RDS >> Sqlserver

Primaire sleutel sorteren

Gegevens worden fysiek opgeslagen door een geclusterde index, die meestal de primaire sleutel is, maar dat niet hoeft te zijn.

Het is niet gegarandeerd dat gegevens in SQL een volgorde hebben zonder een ORDER BY-clausule. U moet altijd een ORDER BY-clausule opgeven wanneer u de gegevens in een bepaalde volgorde wilt hebben. Als de tabel al op die manier is gesorteerd, zal de optimizer geen extra werk doen, dus het kan geen kwaad om hem daar te hebben.

Zonder een ORDER BY-clausule kan het RDBMS in de cache opgeslagen pagina's retourneren die overeenkomen met uw zoekopdracht terwijl het wacht tot records van schijf zijn ingelezen. In dat geval, zelfs als er een index op de tabel staat, komen de gegevens mogelijk niet binnen in de volgorde van de index. (Let op:dit is slechts een voorbeeld - ik weet niet of denk zelfs niet dat een real-world RDBMS dit zal doen, maar het is acceptabel gedrag voor een SQL-implementatie.)

BEWERKEN

Als u een prestatie-impact hebt bij het sorteren versus wanneer u niet sorteert, sorteert u waarschijnlijk op een kolom (of een reeks kolommen) die geen index heeft (geclusterd of anderszins). Aangezien het een tijdreeks is, sorteert u misschien op tijd, maar de geclusterde index staat op de eerste plaats. SQL Server weet niet dat beide op dezelfde manier toenemen, dus het moet alles overnemen.

Als de tijdkolom en de primaire sleutelkolom gerelateerd zijn op volgorde (de ene neemt toe als en alleen als de andere toeneemt of hetzelfde blijft), sorteer dan in plaats daarvan op de primaire sleutel. Als ze niet op deze manier gerelateerd zijn, verplaatst u de geclusterde index van de primaire sleutel naar de kolom(men) waarop u sorteert.



  1. Methoden voor exporteren en importeren van SQL Server-databasetabellen

  2. oci_bind_by_name en to_date PHP/OCI/Oracle

  3. Hoe kan ik een specifiek record bijwerken zonder SELECT-machtiging?

  4. hoe de datum naar tijd te veranderen in orakel 10g