Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Gibt es eine Begrenzung für InnerJoin?

Sie haben nicht annähernd die Grenze von JOINs für MySQL. Deine Anzahl an Joins ist nicht schlecht. Das Verknüpfen einer abgeleiteten Tabelle (Ihrer inneren Unterabfrage) kann jedoch zu Leistungsproblemen führen, da abgeleitete Tabellen keine Indizes haben. Das Ausführen eines Joins für eine abgeleitete Tabelle ohne Indizes kann langsam sein.

Sie sollten erwägen, eine echte temporäre Tabelle mit Indizes zum Verbinden zu erstellen, oder einen Weg finden, die Unterabfrage zu vermeiden.

Ein JOIN in MySQL ist im Grunde wie eine Suche (Suche) für jede verbundene Zeile. MySQL muss also viele Suchen durchführen, wenn Sie viele Datensätze zusammenführen. Es geht weniger darum, wie viele Tabellen Sie verbinden, als vielmehr um die Anzahl der Zeilen, die Sie verbinden, was ein Problem sein kann.

Wie auch immer, MySQL führt nur so viele Suchvorgänge durch, bevor es aufgibt und einfach die gesamte Tabelle liest. Es macht einen ziemlich guten Job bei der Entscheidung, was weniger teuer ist.

Vielleicht ist das Beste, was Sie tun können, ihm bei der Schätzung zu helfen, indem Sie die Indexstatistiken mit ANALYZE TABLE aktualisieren.

Sie können eine WHERE-Klausel pro SELECT haben. Ihre innere Unterabfrage hat also eine WHERE-Klausel und Ihre äußere Abfrage hat eine WHERE-Klausel, und diese werden nach dem JOIN angewendet (zumindest logisch, obwohl MySQL sie im Allgemeinen aus Leistungsgründen zuerst anwendet).

All dies setzt außerdem voraus, dass Sie wissen, wie Indizes richtig verwendet werden.