Wydajność złożonego klucza głównego jako klucza obcego


12

Mam tabelę z kompozytowym kluczem podstawowym (składającym się z 4 kolumn), która służy do zapewnienia, że ​​żadne duplikaty nie zostaną wprowadzone do tabeli. Potrzebuję teraz nowej tabeli, która będzie musiała odwoływać się do kluczy w tej tabeli jako kluczy obcych.

Moje pytanie brzmi, które podejście jest bardziej wydajne dla prędkości wyszukiwania:

1) Czy utworzę nową tabelę zawierającą wszystkie 4 kolumny i odwołam się do nich w kluczu obcym.

lub

2) Czy utworzę nową kolumnę tożsamości w tabeli klucza podstawowego i użyję jej jako klucza obcego w nowej tabeli?

Oczekuje się, że ta baza danych pomieści bardzo dużą ilość danych, więc zbudowałem ją do tej pory w celu zminimalizowania ilości danych przechowywanych w każdej tabeli. Mając to na uwadze, najlepszym rozwiązaniem będzie opcja 2, ponieważ zapisam 2 kolumny int i kolumnę datetime dla każdego wiersza, ale chcę uniknąć wydłużania czasu wyszukiwania, jeśli nie jest to konieczne.


1
W takim przypadku prawie zawsze używałbym klucza zastępczego (np. INT IDENTITYAn) - znacznie ułatwia to odwoływanie się do tej tabeli i dołączanie do niej. Aby uniknąć duplikatów, nałóż ograniczenie UNIKALNE na te cztery kolumny. Ponadto: wąskie klucze podstawowe są znacznie lepsze ze względu na wydajność (jeśli są używane jako klucz klastrowania)
marc_s

Odpowiedzi:


11

Koszt użycia prostej syntetycznej liczby całkowitej PK jest niewielki, a korzyść w twoim przypadku byłaby prawdopodobnie znaczna.

  • Jak zauważyłeś, będziesz mieć znacznie prostszy związek z FK.
  • Mały PK tworzy małe (i szybkie) indeksy. Twoje całkowite miejsce w tabeli prawdopodobnie zostanie zmniejszone przez dodanie takiej kolumny.
  • Jeśli reguły biznesowe kiedykolwiek się zmienią, nie będziesz musiał zmieniać kolejności tabeli.

Jedynym istotnym minusem, który przychodzi na myśl, jest to, że możesz stracić wydajność w przypadku zapytań, które skorzystały na klastrowaniu na złożonym PK. Jeśli uważasz, że to może być znaczące, kontynuuj grupowanie złożonego klucza kandydującego, ale umieść PK na kluczu syntetycznym.


5

Jak to często bywa w świecie SQL, odpowiedź brzmi: „To zależy”.

Spójrz na to pytanie, aby uzyskać wskazówki: Czy klucze naturalne zapewniają wyższą lub niższą wydajność w SQL Server niż zastępcze klucze całkowite?

Zdarzają się przypadki poprawy wydajności przy użyciu kluczy naturalnych jako kluczy obcych. Jednak w większości przypadków lepsze będą mniejsze klucze (czytaj: klucze zastępcze).

Jeśli wprowadzisz tę kolumnę TOŻSAMOŚCI, uczyniłbym ją nawet Kluczem Podstawowym, a zamiast tego zmieniłem kolumny „naturalne” na WYJĄTKOWE OGRANICZENIE.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.