2010-02-04 19 views
12

Podczas tworzenia zrzutu mysql zawierający strukturę mojej bazy danych, jeden z tabel zawiera następujące informacje:Podstawowy klucz kontra kluczowego

CREATE TABLE `completedTransactions` (
    `paymentId` int(10) unsigned NOT NULL, 
    `timestamp` int(15) unsigned NOT NULL, 
    `actionTaken` varchar(25) NOT NULL, 
    `response` varchar(255) NOT NULL, 
    `responseCode` int(5) NOT NULL, 

    PRIMARY KEY (`paymentId`,`timestamp`), 
    KEY `paymentId` (`paymentId`), 

Klucz podstawowy jest to, czego się spodziewałem, ale jestem pewien, co ostatnia linia dotyczy?

KEY `paymentId` (`paymentId`), 

Czy jest to związane z indeksem?

+1

Zastanawiam się, dlaczego w tym przypadku, dodatkowy index jest tworzony na paymentId, ponieważ klucz podstawowy powinien być również indeksem. A więc, imho, dodatkowy indeks (klucz) jest przestarzały. –

+1

@Frederik: Klucz podstawowy jest złożonym kluczem, więc jego indeks będzie oparty na tym. Podczas wyszukiwania tylko na podstawie 'paymentId', ten indeks może nie być przydatny. –

+0

@Frederik Gheysels: Ponieważ zarówno 'paymentId' jak i' timestamp' należą do klucza podstawowego, indeks jest tworzony na obu polach. Więc można utworzyć dodatkowy indeks dla 'paymentId'. –

Odpowiedz

10

Tak, słowo kluczowe KEY jest tylko aliasem dla słowa kluczowego INDEX.

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name 
    ... 
    {INDEX|KEY} [index_name] [index_type] (index_col_name,...) 
     [index_option] ... 

Źródło: MySQL Documentation: CREATE TABLE

1

Cytowanie dokumentację CREATE TABLE:

KEY jest zwykle synonimem INDEX.
Kluczowy atrybut PRIMARY KEY może również być określony jako jako tylko KEY, gdy jest podany w definicję kolumny. To było zaimplementowane dla kompatybilności z innymi systemami baz danych .

2

KEY nie jest unikalny, PRIMARY KEY i UNIQUE KEY są unikalne.

Powiązane problemy