Gdy kolumna z liczbą całkowitą jest oznaczona jako klucz podstawowy w tabeli SQLite, czy należy również jawnie utworzyć dla niej indeks? Wydaje się, że SQLite nie tworzy automatycznie indeksu dla kolumny klucza podstawowego, ale być może i tak go indeksuje, biorąc pod uwagę jego cel? (Cały czas będę szukał w tej kolumnie).
Czy sytuacja wyglądałaby inaczej w przypadku ciągu klucza podstawowego?
źródło
sqlite_master
tabeli z nazwą zaczynającą się odsqlite_autoindex_
.UNIQUE
indeks (lubUNIQUE
ograniczenie) na polu (polach) nadrzędnym / odniesienia, jeśli nie istnieje; jest zalecana , że dziecko / odwoływania się pole (s) mają indeks (który zwykle nie będzie unikatowy): zobacz tutajSQL Data Constraints
tutaj mówi: W większości przypadków ograniczenia UNIQUE i PRIMARY KEY są implementowane poprzez utworzenie unikalnego indeksu w bazie danych. (Wyjątkami są INTEGER PRIMARY KEY i PRIMARY KEY w tabelach BEZ ROWID.). Więc odpowiedź nie zawsze jest prawdziwa?Jeśli kolumna jest oznaczona jako INTEGER PRIMARY KEY, w rzeczywistości jest około dwa razy szybsza niż podobne wyszukiwanie wykonane przez podanie dowolnego innego klucza podstawowego lub wartości indeksowanej . To dlatego, że:
Zobacz: http://www.sqlite.org/lang_createtable.html#rowid
źródło
Baza danych zawsze po cichu utworzy indeks dla unikalnego klucza podstawowego, aby mogła wewnętrznie sprawdzić, czy jest on unikalny.
Po utworzeniu będzie go używać, gdy będzie to konieczne.
Oczywiście nie zawsze będzie to klaster i zazwyczaj określasz w schemacie, czy chcesz, aby tak było.
źródło