2016-07-20 20 views
0

Hinweis: Ich habe gesucht, um zu sehen, ob diese Frage schon einmal gestellt wurde. Alle vorhandenen Fragen, die ich finden konnte, fragen nach einer zusammengesetzten Indexreihenfolge oder nach der Reihenfolge von Spalten für Abfragen in einer vorhandenen Tabelle.Ist die Reihenfolge der KEYs in einer CREATE TABLE-Anweisung wichtig?

sagen, dass ich die folgende Tabelle haben:

CREATE TABLE `foobar` (
    `foo_id` int(11), 
    `bar_id` int(11), 
    KEY `foo_id` (`foo_id`), 
    KEY `bar_id` (`bar_id`) 
); 

Es verfügt über zwei unabhängige Indizes darauf. Wenn ich die Definition der beiden Indizes tauschen, könnte es so aussehen:

CREATE TABLE `foobar` (
    `foo_id` int(11), 
    `bar_id` int(11), 
    KEY `bar_id` (`bar_id`), 
    KEY `foo_id` (`foo_id`) 
); 

Wenn ich SHOW CREATE TABLE foobar auf jedem von diesen laufen kann ich sehen, dass es einen Unterschied zwischen der Reihenfolge der für jede Tabelle KEY s ist. Meine Frage ist, ist die Reihenfolge in diesem speziellen Fall wichtig? Ich weiß, es wäre wichtig, wenn und bar_id zusammen in einem zusammengesetzten Index verwendet werden, aber hier sind sie nicht.

Wenn es wirklich wichtig ist, gibt es eine Möglichkeit, die Schlüssel beliebig neu anzuordnen, sobald die Tabelle erstellt wurde? (Etwas ähnlich wie ALTER TABLE foobar ADD INDEX foo_id (foo_id) AFTER bar_id, das ich ziemlich sicher bin, ist ungültig, wie geschrieben.)

Antwort

1

Es gibt keine visuelle Darstellung der Schlüssel, und es würde keinen zusätzlichen Aufwand hinzufügen, um sie in irgendeiner Weise anzuordnen. Die Schlüsselsetzfunktion fügt den vorhandenen Spalten einfach Eigenschaften hinzu, die neu angeordnet werden können.

Die einzige Ausnahme, die ich sehen könnte, wäre, wenn Sie durch einige IDE (DB Forge, HeidiSQL, SequelPro, usw.) ging, die Schlüsselwerte an der Spitze einer Liste, die sie erstellt haben. Dies ist jedoch auf der Seite des Systems, das es interpretiert und nichts mit der Datenbankleistung zu tun hat.

-1

können Sie in Altertable comanad ändern verwenden

ALTER TABLE table_name MODIFY foo_id int AFTER bar_id 
+0

Ich versuche nicht, die _columns_ neu zu ordnen, ich frage mich, ob die Reihenfolge der _indexes_ zählt und wie sie neu anordnen, wenn ja. – smitelli

+0

Ich konnte deine Frage nicht verstehen. Jetzt suche ich das auch. –

0

Nr

Alle Tasten sind 'gleich'. Alle werden bei der Entscheidung berücksichtigt, welche zu verwenden ist. Der Schlüssel mit den geringsten Kosten wird verwendet. ("Kosten" ist eine komplizierte Formel, die den Aufwand zur Durchführung der Abfrage in einer Richtung im Vergleich zu anderen umfasst.)

Wenn Sie InnoDB verwenden, ist es wirklich eine gute Idee, eine PRIMARY KEY zu haben.

Wenn Ihre Tabelle eine „many-to-many“ Mapping-Tabelle ist, hier ist ein weiterer Rat: http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table

Ein verwandtes Thema: Ein „Verbund“ Index ist, die mehrere Spalten. (ZB INDEX(a,b).) Die Reihenfolge der Spalten macht einen Unterschied.