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

Wann sollte STRAIGHT_JOIN mit MySQL verwendet werden?

Ich würde die Verwendung von STRAIGHT_JOIN nicht ohne guten Grund empfehlen. Meine eigene Erfahrung ist, dass der MySQL-Abfrageoptimierer öfter als mir lieb ist, einen schlechten Abfrageplan auswählt, aber nicht oft genug, dass Sie ihn im Allgemeinen einfach umgehen sollten, was Sie tun würden, wenn Sie immer STRAIGHT_JOIN verwenden würden.

Meine Empfehlung ist, alle Abfragen als reguläre JOINs zu belassen. Wenn Sie feststellen, dass eine Abfrage einen suboptimalen Abfrageplan verwendet, würde ich vorschlagen, zuerst zu versuchen, die Abfrage ein wenig umzuschreiben oder neu zu strukturieren, um zu sehen, ob der Optimierer dann einen besseren Abfrageplan auswählt. Stellen Sie außerdem zumindest für innodb sicher, dass nicht nur Ihre Indexstatistiken veraltet sind (TABELLE ANALYSE ). Dies kann dazu führen, dass der Optimierer einen schlechten Abfrageplan auswählt. Hinweise des Optimierungstools sollten im Allgemeinen Ihr letzter Ausweg sein.

Ein weiterer Grund, keine Abfragehinweise zu verwenden, besteht darin, dass sich Ihre Datenverteilung im Laufe der Zeit oder Ihre Indexselektivität ändern kann usw., wenn Ihre Tabelle wächst. Ihre jetzt optimalen Abfragehinweise können mit der Zeit suboptimal werden. Aber der Optimierer wird den Abfrageplan aufgrund Ihrer jetzt veralteten Hinweise nicht anpassen können. Sie bleiben flexibler, wenn Sie dem Optimierer die Entscheidungen überlassen.