sql >> Database >  >> RDS >> Sqlserver

Geclusterd versus niet-geclusterd

Het onderscheid tussen een geclusterde versus niet-geclusterde index is dat de geclusterde index de fysieke volgorde van de rijen in de database bepaalt . Met andere woorden, de geclusterde index toepassen op PersonId betekent dat de rijen fysiek worden gesorteerd op PersonId in de tabel, waardoor een indexzoekopdracht hierop rechtstreeks naar de rij kan gaan (in plaats van een niet-geclusterde index, die u naar de locatie van de rij zou leiden en een extra stap zou toevoegen).

Dat gezegd hebbende, het is ongebruikelijk voor de primaire sleutel om niet de geclusterde index te zijn, maar niet ongehoord. Het probleem met uw scenario is eigenlijk het tegenovergestelde van wat u aanneemt:u wilt uniek waarden in een geclusterde index, geen duplicaten. Omdat de geclusterde index de fysieke volgorde van de rij bepaalt, moet de server, als de index zich op een niet-unieke kolom bevindt, een achtergrondwaarde toevoegen aan rijen die een dubbele sleutelwaarde hebben (in uw geval alle rijen met dezelfde PersonId ) zodat de gecombineerde waarde (sleutel + achtergrondwaarde) uniek is.

Het enige wat ik zou willen voorstellen is niet met behulp van een surrogaatsleutel (uw CourtOrderId ) kolom als de primaire sleutel, maar gebruik in plaats daarvan een samengestelde primaire sleutel van de PersonId en een andere uniek identificerende kolom of reeks kolommen. Als dat echter niet mogelijk (of niet praktisch) is, plaats dan de geclusterde index op CourtOrderId .



  1. een waarde invoegen die is berekend uit een andere tabel

  2. De langzaamste zoekopdrachten vinden

  3. Hoe gegevens opgehaald uit MySQL terug te sturen naar een php-bestand als JSON?

  4. Hulp nodig bij het koppelen van databasewaarden