sql >> Database >  >> RDS >> Mysql

Waarom verbetert STRAIGHT_JOIN deze zoekopdracht zo drastisch, en wat betekent het als het achter het SELECT-sleutelwoord wordt geschreven?

STRAIGHT_JOIN forceert de samenvoegvolgorde van de tabellen, dus table1 wordt gescand in de buitenste lus en table2 in de binnenste lus.

De optimizer is niet perfect (hoewel nog steeds behoorlijk), en de meest waarschijnlijke oorzaak zijn de verouderde statistieken.

Nee, alleen als de optimizer fout is. Dit kan zijn als uw gegevensdistributie ernstig scheef is of niet goed kan worden berekend (bijvoorbeeld voor ruimtelijke of volledige tekstindexen).

Je moet de statistieken verzamelen, de plannen voor beide manieren maken en begrijpen wat deze plannen betekenen.

Als je dat ziet:

  1. Het automatisch gegenereerde plan is niet optimaal en kan niet op de standaardmanier worden verbeterd,

  2. De STRAIGHT_JOIN versie is beter, u begrijpt dat dit altijd zo zal zijn en begrijpt waarom het zal altijd

en gebruik vervolgens STRAIGHT_JOIN .




  1. Azure Database for MySQL/MariaDB migreren naar een lokale server

  2. MySQL-vriendentabel

  3. Wat is het nulkarakter letterlijk in TSQL?

  4. Hoe te converteren naar hoofdletters in SQLite