Mam tabelę, która ma tylko dwa pola, id1 i i2.
Oba są identyfikatorami z innych tabel i są int (10).
Czy powinienem mieć indeks w tej tabeli?
Edycja: Myślę, że ta tabela składa się z dwóch prostych typów danych ... czy MySQL zapytałby nieindeksowane dane mniej efektywnie niż dane indeksowane?
Tabela, o której mowa, będzie miała więcej odczytów niż zapisów i nie będzie bardzo często pytana, więc indeks byłby w porządku.
Odpowiedzi:
0 dla odpowiedzi № 1Jeśli jest to duży stół (tj., składający się z wielu wierszy) dobrym pomysłem może być indeks kolumn, który będzie używany jako część zapytania. Ponadto, jeśli tabela będzie aktualizowana bardzo rzadko i używana bardzo często jako tabela relatora, jeden lub więcej indeksów może znacznie przyspieszyć łączenia związane z tabelą.
Fakt, że dwie kolumny w tabeli odnoszą się do kluczy podstawowych, nie eliminuje potrzeby indeksowania. Rozważ wspólny scenariusz łączenia z tabelą relatora, taki jak:
Tabela 1 JOIN RelatorTable JOIN Tabela 2
Dobrym pomysłem może być utworzenie indeksu dla RelatorTable na kluczu obcym w tej tabeli, który odnosi się do klucza podstawowego z Tabeli 1. Może to przyspieszyć przyłączenia, szczególnie jeśli RelatorTable jest duży.
-2 dla odpowiedzi nr 2
Indeks w bazach danych SQL jest podobny do tych, które Tymieć w książkach, zamiast przeszukiwać zawartość książki, aby znaleźć to, czego szukasz, zamiast tego korzystasz z indeksu, a następnie przeskakujesz na dokładną stronę. Ale w twoim przypadku twoja tabela nie zawiera danych, tylko odniesienia do danych przechowywanych w innych tabelach, więc osobiście tak naprawdę nie widzę potrzeby indeksowania. W tym przypadku pola pola id mogą po prostu funkcjonować jako indeksy .