2010-06-27 2 views
6

Obwohl ich verstehe, dass es sehr praktisch ist, einen Index auf eine eindeutige Spalte zu haben - um einfach und effizient auf Wert Kollision zu überprüfen, sollte ich es dem Programmierer überlassen zu bestimmen, ob eine eindeutige Feldspalte einen Index oder haben soll nicht, in Bezug auf die Größe vs Geschwindigkeit Optimierung.MySQL: Bedeutet ein 'eindeutiges' Spaltenfeld einen Index, und wenn ja, warum?

Soweit ich verstehe, indiziert MySQL automatisch eine Tabellenspalte, die als eindeutig angegeben ist. Ist es so?

Gibt es einen Grund, warum MySQL scheinbar keine eindeutigen Spalten OHNE Indizes haben kann? Ja, jeder Werteinfügung/Aktualisierung wird O (number_of_rows) Operation ohne eine, aber wie ich schon sagte, sollte nicht der Programmierer mit der Entscheidung besteuert werden?

Nur neugierig!

Antwort

11

Soweit ich weiß, indiziert MySQL automatisch eine Tabellenspalte, die als eindeutig angegeben ist. Ist es so?

Ja. Es ist nicht unbedingt "automatisch", es ist implizit. UNIQUE ist Typ des Index, so dass natürlich Spalte indiziert ist.

Gibt es einen Grund, warum MySQL scheinbar keine eindeutigen Spalten OHNE Indizes haben kann?

Weil es dumm wäre für MySQL eine vollständige Tabellen-Scan auf jeden INSERT/UPDATE zu wahren die eindeutige Einschränkung zu tun.

bearbeiten:

Ja, jeder Wert Einfügung/Aktualisierung ohne eine O (number_of_rows) Betrieb sein, aber wie ich schon sagte, sollte nicht der Programmierer mit der Entscheidung besteuert?

Warum sollte ein Programmierer die grundlegende Datenintegrität außerhalb der Datenspeicherschicht manuell erzwingen? Ich verstehe, wo Sie mit diesem gehen, aber die Tatsache ist ein Index kann nicht weh tun alles (es dauert nur ein bisschen mehr Platz) - so gibt es wirklich keine Entscheidung zu prüfen.

+1

In der Tat ist ein Grund, ein DBMS zu verwenden, die Datenintegrität zu erhalten. –

+0

Datenintegrität und Datenindexierung, obwohl verwandt, sind zwei orthogonale Konzepte, nein? – amn

+1

@amn, ja, ich glaube, sie sind. Und meistens ist die Lösung für die Datenintegrität nicht so elegant wie in diesem speziellen Fall. Oft kommt es darauf an, dass die Daten, die da sein sollen, tatsächlich überprüft werden. Dies hängt natürlich auch vom RDMS, Unterstützung für Fremdschlüssel, Schlüsseleinschränkungen usw. ab. –

Verwandte Themen