Quello che mi salta subito all'occhio è MyISAM .
ASPETTO #1:Il JOIN stesso
Ogni volta che ci sono join che coinvolgono MyISAM e InnoDB, le tabelle InnoDB finiranno per avere un comportamento di blocco a livello di tabella invece del blocco a livello di riga a causa del coinvolgimento di MyISAM nella query e MVCC non può essere applicato ai dati MyISAM. MVCC in alcuni casi non può nemmeno essere applicato a InnoDB.
ASPETTO #2:Coinvolgimento di MyISAM
Da un'altra prospettiva, se qualsiasi tabella MyISAM viene aggiornata tramite INSERT, UPDATE o DELETE, le tabelle MyISAM coinvolte in una query JOIN verrebbero bloccate da altre connessioni DB e la query JOIN deve attendere fino a quando le tabelle MyISAM possono essere lette. Sfortunatamente, se c'è un mix di InnoDB e MyISAM nella query JOIN, le tabelle InnoDB dovrebbero subire un blocco intermittente come i suoi partner MyISAM nella query JOIN a causa del blocco della scrittura.
ASPETTO #3:Strumento per ottimizzare le query
MySQL si basa sulla cardinalità dell'indice per determinare un piano EXPLAIN ottimizzato. La cardinalità dell'indice è stabile nelle tabelle MyISAM finché non si verificano molti INSERT, UPDATE e DELETE nella tabella, in base ai quali è possibile eseguire periodicamente OPTIMIZE TABLE
contro i tavoli MyISAM. La cardinalità dell'indice InnoDB NON È MAI STABILE !!! Se esegui SHOW INDEXES FROM *innodbtable*;
, vedrai la cardinalità dell'indice cambiare ogni volta che esegui quel comando. Questo perché InnoDB si tufferà nell'indice per stimare la cardinalità. Anche se esegui OPTIMIZE TABLE
contro una tabella InnoDB, che deframmenterà solo la tabella. OPTIMIZE TABLE
eseguirà ANALYZE TABLE
internamente per generare statistiche sull'indice rispetto alla tabella. Funziona per MyISAM. InnoDB lo ignora.
Il mio consiglio per te è di fare di tutto e convertire tutto in InnoDB e ottimizzare le tue impostazioni di conseguenza.
AGGIORNAMENTO 18-12-2012 15:56 EDT
Che ci crediate o no, c'è ancora un ticket aperto per l'adesione a InnoDB/MyISAM durante un SELECT FOR UPDATE . Se lo leggi, riassume la risoluzione come segue:NON FARLO !!! .