Le pagine dei file di dati innodb vengono memorizzate nella cache nel pool di buffer innodb. Questo è quello che ti aspetteresti. La lettura dei file è lenta, anche su dischi rigidi di buona qualità, in particolare le letture casuali che sono principalmente ciò che vedono i database.
È possibile che la tua prima query stia eseguendo una sorta di scansione della tabella che estrae molte pagine nel pool di buffer, quindi accedervi è veloce. O qualcosa di simile.
Questo è quello che mi aspetterei.
Idealmente, utilizzare lo stesso motore per tutte le tabelle (eccezioni:tabelle di sistema, tabelle temporanee (forse) e tabelle molto piccole o di breve durata). Se non lo fai, devono combattere per l'ariete.
Supponendo che tutte le tue tabelle siano innodb, fai in modo che il pool di buffer utilizzi fino al 75% della ram fisica del server (supponendo che tu non esegua troppe altre attività sulla macchina).
Quindi sarai in grado di inserire circa 12G del tuo database in ram, quindi una volta "riscaldato", i 12G "più utilizzati" del tuo database saranno in ram, dove l'accesso è semplice e veloce.
Alcuni utenti di mysql tendono a "riscaldare" i server di produzione dopo un riavvio inviando loro query copiate da un'altra macchina per un po' (questi saranno slave di replica) fino a quando non li aggiungono al loro pool di produzione. Questo evita l'estrema lentezza vista mentre la cache è fredda. Ad esempio, Youtube fa questo (o almeno lo faceva prima; Google li ha acquistati e ora potrebbero utilizzare Google-fu)