2010-01-21 10 views
24

Während MySQL zu lernen, habe ich gelesen, dass Sie die folgende Anweisung ausführen kann, wenn eine Spalte an eine MySQL-Tabelle hinzu:Ist die Spaltenreihenfolge in Ihren MySQL-Tabellen von Bedeutung?

ALTER TABLE contacts ADD email VARCHAR(60) AFTER name; 

oder

ALTER TABLE contacts ADD email VARCHAR(60) FIRST; 

Wann möchten Sie dies tun wollen? Kann die Spaltenreihenfolge für Abfrageoptimierungszwecke verwendet werden? Sollten Longblobs die letzte Säule sein, um den Platzverbrauch zu optimieren? Oder bestehen diese Befehle aus einem anderen Grund?

+0

Ich habe nie einen Unterschied in Bezug auf die Leistung bemerkt, aber ich habe auch nie einen Vergleich durchgeführt. Ich habe immer gedacht, dass es in erster Linie eine Usability-Sache ist, die es mir erlaubt, die Spalten in logischer Reihenfolge aufzustellen, selbst wenn ich zurückgehe und später eins hinzufüge. – ceejayoz

+2

Siehe http://stackoverflow.com/questions/894522/is-there-any-reason-to-wurry-about-the-column-order-in-a-table, was darauf hindeutet, dass es einen Leistungseinfluss gibt. – Matchu

Antwort

0

Nein, es sollte nicht wichtig sein. Eine normalisierte Datenbank sollte auch keine Einschränkungen für die Spaltenreihenfolge enthalten.

6

Dies hat jedoch Auswirkungen auf die Reihenfolge des Ergebnisses in select * from mytable.

Deshalb sollten Sie immer die Spalte in der SELECT-Anweisung benennen, z. select col1, col2 from mytable. Wenn Sie jedoch wissen, dass die App * verwendet, müssen Sie beim Hinzufügen einer Spalte vorsichtig sein.

Andernfalls bestellen Sie die Spalte so, dass sie am logischsten zu verstehen ist. Wenn es sich auf die Perf-Funktion auswirkt, heißt das, dass Sie sich bereits auf der dunklen Seite der Optimierung der Datenbankperformance befinden und wahrscheinlich woanders ein Problem haben.

0

Spalte Reihenfolge spielt keine Rolle. Dies ist ein reines Komfortmerkmal. Damit können Sie Ihre Datenbanktabelle nach der Erstellung beliebig umstrukturieren.

0

Das relationale Modell hat kein Konzept der Reihenfolge von Spalten innerhalb von Zeilen und kein Konzept der Reihenfolge von Zeilen in Tabellen.

6

Die Frage hat nichts mit dem relationalen Modell oder SQL zu tun. Es ist eine Performance-Frage.

In einigen Datenbanken ist es aufgrund der Art und Weise, wie der Festplattenzugriff ausgeführt wird, effizienter, die Spalten auf eine bestimmte Weise zu sortieren. Ob es einen signifikanten Vorteil gibt, ist auch plattformspezifisch. Es handelt sich um ein I/O-Problem auf niedriger Ebene, das sich auf die Art und Weise bezieht, wie der zugrunde liegende Speicher entworfen wird, und auf die Art, auf die er von der Engine zugegriffen wird. Proprietäre Motorenanbieter stellen diese Informationen im Allgemeinen über ihre Schulungs- und Schulungsabteilungen zur Verfügung.

Ich denke, dass Sie mit jemandem sprechen müssen, der die wesentlichen Details des Speichermodells und der i/o-Methoden für MySQL auf Ihrer spezifischen Plattform kennt oder jemand, der diese auf Ihrer Plattform benchmarkiert hat, um einen zu bekommen Antworten.

Es ist durchaus möglich, sie legen Sie auf der Festplatte in einer optimierten Weise und verstecken Sie diese Spalte Bestellung von Ihnen.

1

Ich dachte, dass es keine Frage der Leistung hat, aber es hat in einigen Fällen - wenn Sie Indizes verwenden.

Beispiel.

Ich habe verwendet Join-Tabelle:

| category_id | user_id | 

Beide Säulen waren unsigned int (10) und primary key (category_id, user_id) Achten Sie auf der Reihenfolge der Spalten. Als ich anfing, von dieser Tabelle mit where user_id = ? zu wählen - war die Leistung niedrig.

Nachdem ich die Reihenfolge der Spalten geändert (Benutzer-ID zuerst gemacht) begann es, wählen Sie mal schneller.

+1

http://dev.mysql.com/doc/refman/5.6/en/multiple-column-indexes.html – NovaDenizen

+2

Die Spaltenreihenfolge in einem zusammengesetzten Index ist wichtig - aber das hat nichts mit der Spaltenreihenfolge in der Tabelle zu tun . (Diese "Antwort" spricht also nicht die "Frage" an.) –

1

A "Wann möchten Sie das verwenden" und nicht ein Leistungsproblem.

Zeilenbasierte Replikation wird abgebrochen, wenn die Spaltenreihenfolge zwischen Master und Slave abweicht und die Spaltentypen nicht kompatibel sind (Fehler 1677).

ALTER TABLE Kontakte MODIFY email VARCHAR (60) AFTER name;

wäre eine Möglichkeit, dieses Problem zu beheben.

Verwandte Themen