Różnica między kluczem, kluczem podstawowym, unikalnym kluczem i indeksem w MySQL

250

Kiedy należy używać KEY, PRIMARY KEY, UNIQUE KEYi INDEX?

WSPARCIE
źródło
2
Klawisz PODSTAWOWY służy do identyfikacji wierszy, nie pozwala wstawić dwóch wierszy z tymi samymi identycznymi danymi ... Klawisz INDEKS służy do przyspieszania wyszukiwania (minimalne wolne wstawianie). UNIKALNY klucz do unikalnych danych w kolumnie.
Hos Mercury,

Odpowiedzi:

303

KEYi INDEXsą synonimami w MySQL. Oni oznaczają to samo. W bazach danych można użyć indeksów, aby poprawić szybkość pobierania danych. Indeks jest zazwyczaj tworzone na kolumnach używanych w JOIN, WHEREi ORDER BYklauzul.

Wyobraź sobie, że masz tabelę o nazwie usersi chcesz wyszukać wszystkich użytkowników o nazwisku „Smith”. Bez indeksu baza danych musiałaby przejść przez wszystkie rekordy tabeli: jest to powolne, ponieważ im więcej rekordów masz w bazie danych, tym więcej pracy trzeba zrobić, aby znaleźć wynik. Z drugiej strony indeks pomoże szybko przejść do bazy danych na odpowiednie strony, na których przechowywane są rekordy „Smith”. Jest to bardzo podobne do tego, w jaki sposób my, ludzie, przeglądamy książkę telefoniczną, aby znaleźć kogoś według nazwiska: Nie zaczynamy przeszukiwać katalogu od okładki do okładki, o ile wstawiamy informacje w kolejności, w jakiej możemy użyj, aby szybko przejść do stron „S”.

Klucze podstawowe i klucze unikatowe są podobne. Klucz podstawowy to kolumna lub kombinacja kolumn, które mogą jednoznacznie identyfikować wiersz. Jest to specjalny przypadek wyjątkowego klucza . Tabela może mieć co najwyżej jeden klucz podstawowy, ale więcej niż jeden unikalny klucz. Po określeniu unikalnego klucza w kolumnie żadne dwa odrębne wiersze w tabeli nie mogą mieć tej samej wartości.

Zauważ też, że kolumny zdefiniowane jako klucze podstawowe lub klucze unikalne są automatycznie indeksowane w MySQL.

Daniel Vassallo
źródło
2
czy mogę mieć zarówno klucz unikalny, jak i klucz podstawowy o tej samej wartości?
POMOC
58
@needHELP: Jeśli masz tabelę wywoływaną passengersz następującymi polami :, (id, first_name, last_name, age, passport_number)zwykle ustawiasz idkolumnę jako klucz podstawowy. Klucz podstawowy jest automatycznie unikalnym kluczem. Główną różnicą jest to, że możesz mieć tylko jeden klucz podstawowy w tabeli i że kolumna nie może zawierać NULLwartości. Nie ma potrzeby konfigurowania idkolumny, UNIQUEponieważ ustawienie jej na klucz podstawowy automatycznie gwarantuje, że będzie ona unikalna ... Następnie możesz ustawić passport_numberUNIQUEtak, aby nie więcej niż jeden pasażer ...
Daniel Vassallo
32
... mógłby mieć ten sam numer paszportu. Jednak możesz mieć niektórych pasażerów (na przykład dzieci) bez numeru paszportu. W takim przypadku możesz NULLbez problemu wstawić tę kolumnę.
Daniel Vassallo
2
@DanielVassallo Podoba mi się sposób, w jaki czyścisz to między synonimami używanymi przez MySQL.
SIFE
1
Jedno z najlepszych wyjaśnień. Wielkie dzięki :-)
Ravi Hirani
61

KEY i INDEX są synonimami.

Należy dodać indeks, gdy pomiary wydajności i EXPLAIN pokazują, że zapytanie jest nieefektywne z powodu brakującego indeksu. Dodanie indeksu może poprawić wydajność zapytań (ale może spowolnić modyfikacje tabeli).

Powinieneś użyć UNIQUE, jeśli chcesz ograniczyć wartości w tej kolumnie (lub kolumnach), aby były unikalne, aby próby wstawienia zduplikowanych wartości spowodowały błąd.

KLUCZ PODSTAWOWY jest zarówno unikalnym ograniczeniem, jak i sugeruje również, że kolumna NIE JEST NULL. Służy do nadania tożsamości każdemu wierszowi. Może to być przydatne do łączenia z inną tabelą poprzez ograniczenie klucza obcego. Chociaż stół nie musi mieć KLUCZA PODSTAWOWEGO, zwykle jest dobrym pomysłem.

Mark Byers
źródło
KLUCZ PODSTAWOWY służy do nadania tożsamości każdemu wierszowi? wytłumacz mi przepraszam za moją ignorancję.
POMOC
@needHELP: Służy jako sposób jednoznacznej identyfikacji dowolnego wiersza w tabeli. Na przykład, jeśli chcesz usunąć konkretny wiersz w tabeli, warto mieć sposób jednoznacznie go zidentyfikować, aby przypadkowo nie usunąć niewłaściwego wiersza. Przydaje się również do łączenia z inną tabelą podczas indeksowania.
Mark Byers
48

Klucz podstawowy nie dopuszcza NULLwartości, ale unikalny klucz dopuszcza NULLwartości.

Możemy zadeklarować tylko jeden klucz podstawowy w tabeli, ale tabela może mieć wiele unikalnych kluczy (przypisanie kolumny).

Er.Gaurav singh
źródło
17

PRIMARY KEYI UNIQUE KEYsą podobne, z tym wyjątkiem, że ma różne funkcje. Klucz główny sprawia, że ​​wiersz tabeli jest unikalny (tzn. Nie może być 2 wiersza z dokładnie tym samym kluczem). Możesz mieć tylko 1 klucz podstawowy w tabeli bazy danych.

Unikalny klucz powoduje, że kolumna tabeli w wierszu tabeli jest unikalna (tzn. Żaden 2 wiersz tabeli nie może mieć tej samej dokładnej wartości). Możesz mieć więcej niż 1 unikalną kolumnę tabeli kluczy (w przeciwieństwie do klucza podstawowego, co oznacza, że ​​tylko 1 kolumna tabeli w tabeli jest unikalna).

INDEXtworzy również wyjątkowość. MySQL (przykład) utworzy tabelę indeksowania dla indeksowanej kolumny. W ten sposób łatwiej jest pobrać wartość wiersza tabeli, gdy zapytanie jest wyszukiwane w tej indeksowanej kolumnie tabeli. Wadą jest to, że jeśli wykonujesz wiele aktualizacji / usuwania / tworzenia, MySQL musi zarządzać tabelami indeksowania (i może to być wąskim gardłem wydajności).

Mam nadzieję że to pomoże.

Buhake Sindi
źródło
Ponadto UNIQUE KEYmoże być, NULLale PRIMARY KEYnie może być NULL.
Rafay
10

Unikalne klucze: kolumny, w których nie ma dwóch podobnych wierszy

Klucz podstawowy: Zbiór minimalnej liczby kolumn, który może jednoznacznie zidentyfikować każdy wiersz w tabeli (tzn. Żadne dwa wiersze nie są podobne we wszystkich kolumnach stanowiących klucz podstawowy). W tabeli może znajdować się więcej niż jeden klucz podstawowy. Jeśli istnieje klucz unikalny, to jest to klucz podstawowy (nie „klucz podstawowy”) w tabeli. Jeśli nie istnieje unikalny klucz, wówczas do zidentyfikowania wiersza wymagana będzie więcej niż jedna wartość kolumny, np. Imię (nazwisko, nazwisko, nazwa ojca, nazwa matki) może w niektórych tabelach stanowić klucz podstawowy.

Indeks: służy do optymalizacji zapytań. Jeśli zamierzasz wielokrotnie przeszukiwać lub sortować wyniki na podstawie jakiejś kolumny (np. Przeważnie ludzie będą wyszukiwać uczniów według nazwiska, a nie według numeru rzutu), można to zoptymalizować, jeśli wszystkie wartości kolumn to „ indeksowane ”na przykład za pomocą algorytmu drzewa binarnego.

Ashwini Dhekane
źródło
Myślę, że chciałeś powiedzieć, że w tabeli może być tylko jedna PK
Răzvan Flavius ​​Panda
7

Klucz podstawowy - możemy umieścić tylko jeden klucz podstawowy na stole w tabeli i nie możemy pozostawić tej kolumny pustej, gdy wprowadzamy wartości do tabeli.

Unikalny klucz - możemy umieścić więcej niż jeden unikalny klucz w tabeli i możemy pozostawić tę kolumnę pustą, gdy wprowadzamy wartości do tabeli. kolumna przyjmuje unikalne wartości (nie takie same) po zastosowaniu klucza podstawowego i unikalnego.

VIKASH
źródło
tabela ma tylko jeden KLUCZ PODSTAWOWY, ale unikatowe klucze to więcej niż jeden.
VIKASH
6

Klucz podstawowy służy do pracy z różnymi tabelami. Jest to podstawa relacyjnych baz danych. Jeśli masz bazę danych książek, lepiej utworzyć 2 tabele - 1) książki i 2) autorów z INT kluczem podstawowym „id”. Następnie używasz identyfikatora w książkach zamiast nazwiska autorów.

Unikalny klucz jest używany, jeśli nie chcesz powtarzać wpisów. Na przykład możesz mieć tytuł w swojej książce i chcesz mieć pewność, że dla każdego tytułu jest tylko jeden wpis.

irudyak
źródło
2

Unikalny klucz :

  1. Więcej niż jedna wartość może mieć wartość NULL.
  2. Żadne dwie krotki nie mogą mieć takich samych wartości w unikalnym kluczu.
  3. Jeden lub więcej unikalnych kluczy można połączyć w celu utworzenia klucza podstawowego, ale nie odwrotnie.

Klucz podstawowy

  1. Może zawierać więcej niż jeden unikalny klucz.
  2. Wyjątkowo reprezentuje krotkę.
Pritam Banerjee
źródło