Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Klastrowy a nieklastrowany

Różnica między indeksem klastrowym a nieklastrowym polega na tym, że indeks klastrowy określa fizyczną kolejność wierszy w bazie danych . Innymi słowy, zastosowanie indeksu klastrowego do PersonId oznacza, że ​​wiersze będą fizycznie sortowane według PersonId w tabeli, umożliwiając przeszukiwanie indeksu według tego, aby przejść bezpośrednio do wiersza (zamiast indeksu nieklastrowanego, który skieruje Cię do lokalizacji wiersza, dodając dodatkowy krok).

To powiedziawszy, jest niezwykłe aby klucz podstawowy nie był indeksem klastrowym, ale nie jest niespotykany. Problem z twoim scenariuszem jest w rzeczywistości przeciwieństwem tego, co zakładasz:chcesz unikalny wartości w indeksie klastrowym, a nie duplikaty. Ponieważ indeks klastrowy określa fizyczną kolejność wiersza, jeśli indeks znajduje się w nieunikatowej kolumnie, serwer musi dodać wartość tła do wierszy, które mają zduplikowaną wartość klucza (w twoim przypadku wszystkie wiersze z taką samą wartością PersonId ), aby połączona wartość (klucz + wartość tła) była unikalna.

Jedyne, co sugeruję, to nie za pomocą klucza zastępczego (Twój CourtOrderId ) jako klucz podstawowy, ale zamiast tego użyj złożonego klucza podstawowego PersonId i jakaś inna unikatowo identyfikująca kolumna lub zestaw kolumn. Jeśli nie jest to możliwe (lub niepraktyczne), umieść indeks klastrowy na CourtOrderId .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DATEADD(MIESIĄC, DATEDIFF(MIESIĄC, 0, GETDATE()), 0) Czy ktoś może mi to wyjaśnić

  2. Konwersja nie powiodła się podczas konwersji wartości varchar w instrukcji case

  3. Scal dane z dwóch wierszy w jeden

  4. SSIS — Przerywany błąd Konwersja nie powiodła się, ponieważ wartość danych przepełniła określony typ.

  5. Znaleźć wiersze z parametrem w jednej z dwóch kolumn?