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

Beeinflusst die Reihenfolge der Tabellen in direkten Joins ohne Hinweisanweisungen die Leistung?

Antwort auf Ihre Frage - Ja, die Reihenfolge der Tabelle spielt bei der Verknüpfung eine Rolle.

Sie können den Optimierer auch über den Ausführungsplan informieren.

Der ORDERED-Hinweis bewirkt, dass Oracle Tabellen in der Reihenfolge verbindet, in der sie in der FROM-Klausel erscheinen.

Diese Anweisung verknüpft beispielsweise Tabelle TAB1 mit Tabelle TAB2 und verknüpft dann das Ergebnis mit Tabelle TAB3:

 SELECT /*+ ORDERED */ TAB1.COL1, TAB2.COL2, TAB3.COL3
     FROM TAB1, TAB2, TAB3
    WHERE TAB1.COL1 = TAB2.COL1
         AND TAB2.COL1 = TAB3.COL1;

Wenn Sie den ORDERED-Hinweis in einer SQL-Anweisung weglassen, die eine Verknüpfung durchführt, wählt der Optimierer die Reihenfolge, in der die Tabellen verknüpft werden. Sie können den ORDERED-Hinweis verwenden, um eine Join-Reihenfolge anzugeben, wenn Sie etwas über die Anzahl der aus jeder Tabelle ausgewählten Zeilen wissen, das der Optimierer nicht weiß. Solche Informationen würden es Ihnen ermöglichen, eine innere und äußere Tabelle besser auszuwählen, als es der Optimierer könnte.

Wenn Sie die Tabellen analysieren, wählt der Optimierer normalerweise einen effizienten Sternplan aus. Sie können auch Hinweise verwenden, um den Plan zu verbessern. Die genaueste Methode besteht darin, die Tabellen in der FROM-Klausel in der Reihenfolge der Schlüssel im Index zu ordnen, wobei die große Tabelle zuletzt steht. Verwenden Sie dann die folgenden Hinweise:

/*+ ORDERED USE_NL(FACTS) INDEX(FACTS FACT_CONCAT) */