Я бы предложил включить профилирование и провести анализ узких мест.
set profiling=1;
После этого вы можете позволить некоторым из ваших тяжелых запросов работать некоторое время. В конце концов, вы выключаете его и затем проверяете запросы, которые выполнялись, чтобы увидеть, какие из них были наиболее тяжелыми во время выполнения. Если вы не видите
Некоторые другие команды, на которые следует обратить внимание:
show profiles;
select sum(duration) from information_schema.profiling where query_id=<ID you want to look at>;
show profile for query <you want to look at>;
Наконец, если вы хотите увидеть неиспользуемые индексы и у вас есть включенные пользовательские статистические данные
SELECT DISTINCT s.TABLE_SCHEMA, s.TABLE_NAME, s.INDEX_NAME
FROM information_schema.statistics `s` LEFT JOIN information_schema.index_statistics INDXS
ON (s.TABLE_SCHEMA = INDXS.TABLE_SCHEMA AND
s.TABLE_NAME=INDXS.TABLE_NAME AND
s.INDEX_NAME=INDXS.INDEX_NAME)
WHERE INDXS.TABLE_SCHEMA IS NULL;