Mysql
 sql >> Database >  >> RDS >> Mysql

Perché STRAIGHT_JOIN migliora così drasticamente questa query e cosa significa quando viene scritta dopo la parola chiave SELECT?

STRAIGHT_JOIN forza l'ordine di unione delle tabelle, quindi table1 viene scansionato nel ciclo esterno e table2 nell'anello interno.

L'ottimizzatore non è perfetto (sebbene sia ancora abbastanza decente) e la causa più probabile sono le statistiche obsolete.

No, solo quando l'ottimizzatore è sbagliato. Ciò può verificarsi se la distribuzione dei dati è gravemente distorta o non può essere calcolata correttamente (ad esempio per indici spaziali o fulltext).

Dovresti raccogliere le statistiche, costruire i piani per entrambi i modi e capire cosa significano questi piani.

Se lo vedi:

  1. Il piano generato automaticamente non è ottimale e non può essere migliorato con le modalità standard,

  2. Il STRAIGHT_JOIN la versione è migliore, capisci che lo farà sempre e capirai perché lo farà sempre

, quindi usa STRAIGHT_JOIN .