2012-12-26 11 views

Odpowiedz

12

Inną ważną kwestią, którą należy wziąć pod uwagę, jest to, że: indeks złożony (złożony z wielu kolumn) będzie używany tylko wtedy, gdy odwołuje się do n kolumn znajdujących się najbardziej po lewej stronie (na przykład w WHERE klauzula)

Więc jeśli masz pojedynczy indeks złożony na

(UserID, UserName, UserEmail) 

czym wskaźnik ten może być stosowany w następujących przypadkach:

  • gdy szukasz UserID sam (używając tylko lewej kolumnie 1 - UserID)
  • kiedy jesteś szukając UserID i UserName (przy użyciu 2 lewej większość kolumn)
  • gdy szukasz wszystkich trzech kolumn

Ale to pojedynczy wskaźnik związek będzie nigdy mogły być wykorzystywane do poszukiwań na

  • tylko UserName - to druga kolumna w indeksie, a więc wskaźnik ten nie kiedykolwiek być używane
  • tylko UserEmail - to trzecia kolumna w indeksie, a więc wskaźnik ten nie może nigdy być używane

Ju st pamiętasz to - tylko dlatego, że kolumna jest częścią indeksu, niekoniecznie oznacza, że ​​samo przeszukiwanie tej pojedynczej kolumny będzie obsługiwane i przyspieszane przez ten indeks!

Więc jeśli wzory użytkowe i aplikacja naprawdę trzeba szukać na UserName i/lub UserEmail samodzielnie (bez świadczenia innych wartości wyszukiwania), a następnie musi utworzyć oddzielne indeksy na tych kolumnach - tylko pojedynczy związek ONE nie mają żadnej korzyści.

4

Najlepszy sposób definiowania indeksów zależy całkowicie od tego, w jaki sposób będziesz korzystać z tabeli. Nie ma sensownego sposobu wybierania indeksów tylko na podstawie definicji tabeli.

Jeśli twój kod przeszuka Twoją tabelę z nazwą użytkownika lub dołączy do twojej tabeli z inną tabelą poprzez nazwę użytkownika, to rozsądniej będzie zdefiniować indeks tej kolumny. Jeśli twój kod dołącza do tabeli z inną tabelą przy użyciu dwóch kolumn (nazwa użytkownika i adres użytkownika), wówczas rozsądniej byłoby zdefiniować indeks dla tych dwóch kolumn. Ponieważ wszystkie twoje kolumny są zdefiniowane jako unikalne, nie wierzę, aby tak się stało, więc nie będziesz potrzebował wielu indeksów kolumn w tej tabeli.

Istnieje kilka dodatkowych porad dotyczących używania wielu indeksów kolumn: Wiele indeksów kolumn jest również używanych w przypadku filtrów, które częściowo pasują do indeksu, ale z pewnymi warunkami.
Przykład: Jeśli zdefiniujesz indeks dwukolumnowy na nazwę użytkownika i adres użytkownika (w podanej kolejności), uzyskasz wzrost wydajności w wyszukiwaniach, które będą filtrować obie kolumny (nazwa użytkownika i poczta użytkownika). Dzięki temu indeksowi zyskasz także na wydajności w filtrach, które używają tylko nazwy użytkownika, ponieważ jest to pierwsza kolumna indeksu, ale nie w przypadku wyszukiwania przez użytkownika, ponieważ druga kolumna indeksu nie może być używana samodzielnie.
Reguła: Indeks może być używany do filtrowania z dokładnymi pasującymi kolumnami lub filtrowania z podzestawem kolumn, które pasują do kolejnych górnych kolumn w definicji indeksu.

2

Proszę podzielić się swoimi przemyśleniami, dlaczego jeden jest lepszy od innych.

To zależy od tego, co robisz.

Zobacz, indeks jest używany tylko "od lewej do prawej". Tak więc, w indes na UserID; Nazwa użytkownika jest bezużyteczna, jeśli wybiorę TYLKO filtrowanie według nazwy użytkownika.

Generalnie Przypuszczam trzech indeksów tutaj:

  • Uniuqe Index, skupione w USERID jako klucz podstawowy.
  • Unikalny indeks nazwy użytkownika, niesklasyfikowany.
  • Unikalny indeks na UserEmail, niezakontraktowany.

Powodem nie jest całkowicie na wydajność, ale:

  • trzeba będzie pierwszy jako klucz podstawowy dla forein kluczowych relacji.
  • Potrzebujesz dwóch pozostałych, aby poprawnie obsługiwać unikalne ograniczenia - nie ma sposobu, aby to zrobić bez indeksów.

Dodatkowo potrzebujesz elastyczności wyszukiwania według nazwy użytkownika i użytkownika UserEmail, co oznacza, że ​​nie można ich łączyć.

Wydajność naprawdę wchodzi tutaj na końcu - ze względów performacnych Wszystkie te indeksy mogą zawierać wszystkie dodatkowe pola (nie jako część indeksu, ale jako kolumny włączone, ale tak naprawdę nie ma innego rozsądnego sposobu, aby ta tabela działała, chyba że możesz udzielić wielu rejestracji dla tego samego użytkownika:

Powiązane problemy