2016-04-21 6 views
0

Angenommen, ich habe eine von vier Tabellen verbinden, Tabelle 1, die die anderen 3 Tabellen verweisen (Table2,3,4) über Fremdschlüsselbeziehungen:MySQL Query-Optimierung durch, um die Synchronisation von Spalten und WHERE-Klausel Bedingungen

SELECT a.column_a, b.column_b, c.column_c, d.column_d 
FROM Table1 a, Table2 b, Table3 c, Table4 d 
WHERE a.col1_fk=d.col_id 
AND a.col2_fk=c.col_id 
AND a.col3_fk=b.col_id 

Um die beste Optimierung der obigen Anweisung zu haben, sollten die Join-Bedingungen in der gleichen Reihenfolge sein, in der die Spalten der SELECT-Anweisung sind? Ist mein Beispiel also am wenigsten optimiert? Oder ist die genannte Reihenfolge nicht wichtig?

Antwort

2

Es ist nicht von Bedeutung. Der Abfrageoptimierer entscheidet, welche Tabelle zuerst gelesen wird.
Dies kann sich auch ändern, wenn Ihre Datengröße zunimmt. Zum Beispiel filtert Ihre WHERE-Klausel eines Tages 90% einer Tabelle, so dass MySQL diese Tabelle zuerst liest. Tausend INSERT s später könnte die gleiche WHERE Klausel nur 1% filtern. Dann kann MySQL entscheiden, es zuletzt zu lesen oder sogar einen vollständigen Tabellenscan durchzuführen.

Mach dir keine Sorgen über diese Art der Optimierung. Wenn Sie optimieren möchten, lesen Sie etwa EXPLAIN (das zeigt Ihnen auch, in welcher Reihenfolge die Tabellen gelesen werden, abgesehen davon, ob und welche Indizes verwendet werden) und learn to use indexes richtig.

Und nichts für ungut, was Sie wirklich lernen sollten, ist die richtige Joinsyntax, die mit dem ANSI SQL Standard von 1992 eingeführt wurde. Here sind einige Beispiele.

+0

Nichts für ungut - ich weiß, was du meinst: INNER JOIN, OUTER JOIN usw. Vielleicht eines Tages werde ich. Ich benutze SQL seit 1993 - rein und raus. Der alte Weg funktioniert immer noch gut für meine Joins. Der neue Weg scheint das Gleiche nur komplizierter zu machen. – Mikey

+0

Über Indizes weiß ich, dass alle Felder, die an einer WHERE-Klausel teilnehmen, indiziert werden sollten. Dies sind Primär- und Fremdschlüssel. Ich kenne EXPLAIN (EXPLAIN PLAN), aber ich habe es nie benutzt - merkwürdigerweise. Ich werde darüber lesen. – Mikey