2011-01-05 11 views
11

Zrobiłem coś takiego w celu wykorzystania on duplicate key update:Jakie jest znaczenie nazwy indeksu podczas tworzenia indeksu w MySQL?

CREATE UNIQUE INDEX blah on mytable(my_col_to_make_an_index); 

i jego działało w porządku. Po prostu nie jestem pewien, jaki jest cel nazwy indeksu - w tym przypadku "bla". To, co przeczytałem, mówi o użyciu, ale nie mogę zrozumieć dlaczego. Wygląda na to, że nie jest używany w zapytaniach, chociaż widzę go po wyeksportowaniu schematu.

Więc ... do czego służy nazwa indeksu? Jeśli to pomaga linia w CREATE TABLE kończy się patrząc jak:

UNIQUE KEY `clothID` (`clothID`) 

Odpowiedz

11

Nazwa indeks jest używany do indeksu odniesienia dla przyszłych poleceń. Podobnie jak indeks kropli.

http://dev.mysql.com/doc/refman/5.0/en/drop-index.html

Wystarczy pomyśleć o nazwach takich jak indeks nazw tabel. Możesz równie łatwo zrobić stół o nazwie "bla".

CREATE TABLE blah (f1 int); 

Ale "bla" nie jest zbyt pomocny do wykorzystania w przyszłości. Po prostu bądź konsekwentny. coś

CREATE UNIQUE INDEX field_uniq on mytable(field); 

lub

CREATE INDEX field1_field2_inx on mytable(field1, field2); 
+0

Czy mogę utworzyć indeksy o tej samej nazwie na różnych stołach? –

+1

@FrozenFlame Można w MySQL, ale nie w wielu innych bazach danych, takich jak PostgreSQL. – ostrokach

1

Jesteś poprawne. Nazwa indeksu jest używana tylko jako identyfikator, więc możesz się do niego odwołać, jeśli chcesz ją później edytować, usunąć lub wysłać zapytanie. Nie jest używany do żadnych innych celów.

Możesz podać indeks, który jest dla Ciebie najwygodniejszy, ale pewna konsystencja prawdopodobnie by Ci pomogła (nazywanie twojego indeksu "bla" jest całkowicie poprawne, ale nie będziesz miał pojęcia, gdzie on jest, co robi, lub dlaczego go stworzyłeś).

8

Nazewnictwo umożliwia globalną przestrzeń nazw i pomaga lepiej zrozumieć schemat tabeli.

Nazwa indeksu jest bardzo przydatna w przypadku forcing index hint. Staraj się nie używać tej samej nazwy dla indeksu i kolumny (niejednoznaczne), a wielbłąd nie ma znaczenia dla systemu takiego jak Windows (który nie uwzględnia wielkości liter).

Na przykład coś takiego:

unique key cloth_id_uniq (cloth_id); 
>>allow people knowing this an unique key on column cloth_id 

fulltext key description_ft (description); 
>>allow people knowing this index is fulltext on column description 

Nie sądzę, istnieje standardowa konwencja nazewnictwa, co wydaje się najbardziej intuicyjny pomoże.

Powiązane problemy