2010-03-10 12 views
8

in MySQL, se creo una chiave univoca su due colonne, diconomysql chiave unica e l'indice

UNIQUE KEY my_key (column1, column2)

E 'necessario costruire un altro tasto sulla column1? Il mio obiettivo è quello di avere colonne1 e column2 univoche, e farò molte selezioni digitate da column1.

+1

ha appena fatto un esperimento utilizzando EXPLAIN, sembra che non sia necessario creare un'altra chiave su column1, poiché mysql utilizzerà la chiave univoca quando si esegue la selezione digitata per column1. – Beier

risposta

11

No, non è necessario perché è possibile utilizzare un indice su (colonna1, colonna2) anziché un indice di colonna1.

È possibile che si desideri creare un nuovo indice solo sulla seconda colonna poiché l'indice (colonna1, colonna2) non è valido quando si cerca solo per (colonna2).

8

No, il tuo indice di my_key si prende cura di qualsiasi domanda sul column1 o condizioni sulla column1 E column2. Tuttavia, se si effettuano le query solo su column2, è necessario aggiungere un indice aggiuntivo per column2 per poter eseguire query in modo efficiente.

Inoltre, se entrambi column1 e column2 sono unici, allora si potrebbe prendere in considerazione utilizzando qualcosa di simile

[...] 
UNIQUE(column1), 
UNIQUE(column2), 
PRIMARY KEY (column1, column2); 

Questo assicura che sia column1 e column2 sono unici, e qualsiasi richiesta selezionando solo column1 e column2 può essere recuperato utilizzando l'accesso solo indice.

2

Un indice UNIQUE è un btree-index. Questo indice è ordinato ed è per questo che non hai bisogno di un secondo indice sul primo colummn. L'ordinamento della combinazione funzionerà anche solo per la prima colonna, ma non solo per la seconda colonna.

Problemi correlati