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

Quando usare STRAIGHT_JOIN con MySQL

Non consiglierei di usare STRAIGHT_JOIN senza una buona ragione. La mia esperienza è che l'ottimizzatore di query MySQL sceglie un piano di query scadente più spesso di quanto vorrei, ma non abbastanza spesso da doverlo semplicemente ignorare in generale, che è quello che faresti se usassi sempre STRAIGHT_JOIN.

La mia raccomandazione è di lasciare tutte le query come JOIN regolari. Se si scopre che una query sta utilizzando un piano di query non ottimale, suggerirei prima di provare a riscrivere o ristrutturare un po' la query per vedere se l'ottimizzatore sceglierà un piano di query migliore. Inoltre, almeno per innodb, assicurati che non sia solo che le statistiche dell'indice non siano aggiornate (ANALISI TABELLA ). Ciò può indurre l'ottimizzatore a scegliere un piano di query scadente. I suggerimenti per lo strumento di ottimizzazione dovrebbero generalmente essere la tua ultima risorsa.

Un altro motivo per non utilizzare i suggerimenti per le query è che la distribuzione dei dati potrebbe cambiare nel tempo o la selettività dell'indice potrebbe cambiare, ecc. man mano che la tabella cresce. I suggerimenti per le query che ora sono ottimali potrebbero diventare non ottimali nel tempo. Ma l'ottimizzatore non sarà in grado di adattare il piano di query a causa dei tuoi suggerimenti ormai obsoleti. Rimani più flessibile se consenti all'ottimizzatore di prendere le decisioni.