Czy musisz jawnie utworzyć indeks, czy jest on domyślny podczas definiowania klucza podstawowego? Czy odpowiedź jest taka sama dla MyISAM i InnoDB?
243
Klucz podstawowy jest zawsze indeksowany. To samo dotyczy MyISAM i InnoDB i ogólnie dotyczy wszystkich silników pamięci masowej, które obsługują indeksy.
Według http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html wydaje się, że jest to domniemane
źródło
Mimo że zapytano o to w 2009 roku, zorientowałem się, że opublikuję faktyczne odniesienie do dokumentacji MySQL na temat kluczy podstawowych. http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html
Odwołanie do MySQL 5.0: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
źródło
Klucz podstawowy jest domyślnie indeksowany zarówno dla MyISAM, jak i InnoDB. Możesz to sprawdzić za pomocą EXPLAIN w zapytaniu, które korzysta z klucza podstawowego.
źródło
Nie musisz jawnie tworzyć indeksu dla klucza podstawowego ... jest to wykonywane domyślnie.
źródło
To chyba odpowiedź
źródło
Indeksy najlepiej stosować w kolumnach, które są często używane w klauzulach where oraz w wszelkiego rodzaju sortowaniu, takim jak „sortuj według”. Być może pracujesz nad bardziej złożoną bazą danych, więc dobrze jest pamiętać kilka prostych zasad.
Indeksy przyspieszają, gdzie klauzule i porządek. Pamiętaj, aby pomyśleć o tym, JAK Twoje dane będą wykorzystywane podczas tworzenia tabel. Jest jeszcze kilka rzeczy do zapamiętania. Jeśli twój stół jest bardzo mały, tj. Tylko kilku pracowników, gorzej jest użyć indeksu niż go pominąć i pozwolić mu wykonać skanowanie tabeli.
Indeksy naprawdę przydają się tylko w przypadku tabel zawierających wiele wierszy.
Inną rzeczą, o której należy pamiętać, jest to wada w sytuacji bazy danych naszych pracowników, że jeśli kolumna ma zmienną długość, indeksy (jak również większość MySQL) działają znacznie mniej wydajnie.
Nie zapomnij też o dołączeniach! Indeksowane pola łączenia przyspieszają.
źródło
Klucz podstawowy jest zawsze automatycznie indeksowany i unikalny. Uważaj więc, aby nie tworzyć zbędnych indeksów.
Na przykład, jeśli utworzyłeś tabelę jako taką
ponieważ chcesz zaindeksować klucz podstawowy i wymusić na nim ograniczenie unikatowości, w rzeczywistości utworzyłbyś trzy indeksy
foo
!źródło
Można myśleć o kolumnie klucza podstawowego jak o każdej innej indeksowanej kolumnie z ograniczeniami klucza podstawowego.
W większości przypadków użycia potrzebujemy zarówno klucza podstawowego, jak i indeksowanej kolumny / kolumn w tabeli, ponieważ nasze zapytania do tabeli mogą filtrować wiersze na podstawie kolumny / kolumn, które nie są kluczem podstawowym, w takim przypadku zwykle indeksujemy te kolumny / kolumny także.
źródło