Odnośnie do pytań o indeksy, indeks jest nie tylko pożądany, ale potrzebny "przyspieszyć" rzeczy. Jak rozumiem (w terminach „laików”), funkcją indeksu jest przyspieszenie wyszukiwania i odzyskiwania danych w tabeli.
Powody używania indeksów:
- Zidentyfikuj jednoznacznie każdy wiersz w każdej tabeli (w końcu kluczem podstawowym jest indeks)
- Indeksy są posortowane (nawet jeśli dane nie są)
- Przyspieszenie wyszukiwania i filtrowania:Indeks przyspiesza odzyskiwanie danych, ponieważ „przechowuje” umieszczenie danych w tabeli („wskazuje” dane, które chcesz odzyskać). Ułatwia także silnikowi bazy danych filtrowanie danych (zawsze filtrowanie posortowane jest szybsze i prostsze dane niż zaszyfrowane dane)
- Zoptymalizuj sposób odzyskiwania danych podczas korzystania z powiązanych tabel:każdy klucz obcy musi być zindeksowany w celu przyspieszenia zapytań obejmujących relacje klucza podstawowego i obcego
Niektóre „zasady dotyczące kciuków”, których używam do decydowania, które pola mają być indeksowane:
- Każdy klucz podstawowy jest indeksowany (oczywisty pierwszy:klucz podstawowy musi być unikalny i nie może być pusty)
- Każdy klucz obcy musi być zaindeksowany (aby relacje klucz podstawowy-klucz obcy były efektywne)
- Każde pole liczbowe lub pole daty, według którego muszę przeprowadzić wyszukiwanie, musi być zaindeksowane. To powiedziawszy, staram się unikać
double
(lub dowolnego innego typu liczb zmiennoprzecinkowych), które mają być indeksowane, ponieważ są one zwykle używane do przechowywania wartości, które nie mają być przeszukiwane. - Każdy
char
lubvarchar
pole, na którym muszę przeprowadzić wyszukiwanie, musi być zaindeksowane. Staraj się unikać indeksów wtext
pola, ponieważ mogą przechowywać w nich bardzo duże wartości. - Unikaj indeksowanie pliku binarnego (
blob
) pola... to nie ma sensu - Nie popaść w pokusę indeksowania wszystkiego. Nie spiesz się, aby zdecydować, które pola muszą być indeksowane, a które pola nie mogą być indeksowane.