Aqui estão algumas das coisas que encontrei com a otimização do MySQL:
Se você ver que seu servidor de banco de dados (os processos do MySQL em particular) estão usando a maior parte do tempo da CPU, isso provavelmente significa que você está perdendo índices ou precisa otimizar as consultas.
Ative o registro lento de consultas e siga essas consultas lentas para descobrir como elas podem ser otimizadas. Use "explain" com as consultas lentas para descobrir por que elas estão lentas. A documentação do MySQL tem várias seções sobre como interpretar esses resultados.
Use o memcached para armazenar em cache o resultado de qualquer consulta possível por quanto tempo você puder. Isso é extremamente rápido e capaz de armazenar em cache muitas coisas que o cache de consulta interno do MySQL não pode, mas só pode ser usado em casos onde você sabe que os dados podem ser armazenados em cache a longo prazo ou você expira manualmente o cache.
Configure o "munin" no sistema de banco de dados para começar a coletar informações sobre a utilização do sistema e o carregamento da consulta do banco de dados.
Certifique-se de que seu sistema tenha RAM suficiente que você não esteja trocando, e esperançosamente também o bastante para fazer poucas leituras de disco (use vmstat ou munin para monitorar isso). O que significa que os dados são servidos fora do MySQL ou caches de buffer de disco.
Sean