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

Warum verbessert STRAIGHT_JOIN diese Abfrage so drastisch, und was bedeutet es, wenn es nach dem Schlüsselwort SELECT geschrieben wird?

STRAIGHT_JOIN erzwingt die Join-Reihenfolge der Tabellen, also table1 wird in der äußeren Schleife gescannt und table2 in der inneren Schleife.

Der Optimierer ist nicht perfekt (aber immer noch ziemlich anständig), und die wahrscheinlichste Ursache sind die veralteten Statistiken.

Nein, nur wenn der Optimierer falsch liegt. Dies kann der Fall sein, wenn Ihre Datenverteilung stark verzerrt ist oder nicht richtig berechnet werden kann (z. B. für räumliche oder Volltextindizes).

Sie sollten die Statistiken sammeln, die Pläne für beide Wege erstellen und verstehen, was diese Pläne bedeuten.

Wenn Sie das sehen:

  1. Der automatisch generierte Plan ist nicht optimal und kann nicht mit den Standardmethoden verbessert werden,

  2. Der STRAIGHT_JOIN Version ist besser, du verstehst es immer und verstehst warum es wird immer

, dann verwenden Sie STRAIGHT_JOIN .