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:
-
Il piano generato automaticamente non è ottimale e non può essere migliorato con le modalità standard,
-
Il
STRAIGHT_JOIN
la versione è migliore, capisci che lo farà sempre e capirai perché lo farà sempre
, quindi usa STRAIGHT_JOIN
.