2011-07-11 17 views
6

Czy istnieje potrzeba dodania indeksu do klucza obcego w SQL Server 2008 lub jest to obsługiwane domyślnie. W wielu moich tabelach mam jeden FK, który wskazuje na tabelę kont użytkowników i większość wyborów jest wykonywana z tym WHERE Account_FK = id. Tak więc indeks może być tutaj szybką wygraną, mam nadzieję.Indeks obcego klucza lub nie w SQL Server 2008

Odpowiedz

4

Co do zasady chcesz, aby wszystkie klucze JOIN miały indeksy na nich, więc tak dodaj indeks.

Jeśli jest to klucz złożony, należy umieścić wszystkie odpowiednie pola na liście kluczy indeksu w odpowiedniej kolejności.

Zgodnie z moją wiedzą, jedyny przypadek, w którym indeks jest tworzony automatycznie w SQL Server, jest po dodaniu klucza podstawowego do sterty (tabela bez indeksowania) - PK jest przypisywany automatycznie jako klucz klastrowany; lub, jak wskazuje Damien poniżej, po dodaniu ograniczenia UNIQUE do pola lub zestawu pól.

+1

Ograniczenia PRIMARY KEY i UNIQUE zarówno dodają indeks automatycznie (o takiej samej nazwie, jak ograniczenie - tak, jak są one implementowane), i może być klastrowany lub nieklastrowy (z, jak to się mówi, domyślnym jest utwórz indeks klastrowany, jeśli jest to ograniczenie PK i nie ma jeszcze żadnego indeksu klastrowanego). –

+0

@Damien - dobry punkt, zapomniałem o ograniczeniu "UNIQUE". – JNK

3

Jednym z niewystarczająco oczywistych powodów do dodania indeksu do FK jest to, kiedy chcemy usunąć wiersz w tabeli głównej (tabela konta użytkownika). SQL Server sprawdza każdą relację FK, aby sprawdzić, czy istnieją jakieś wiersze, które uniemożliwiałyby usunięcie, i że to sprawdzanie jest o wiele szybsze dzięki indeksowi w kolumnie FK w tabelach podrzędnych.

Powiązane problemy