думаю, пора открывать для себя команду EXPLAIN и посмотреть план исполнения, используются ли индексы вообще. Причем смотрите как на основной запрос, так и на вложенный.
судя по
занимает 200-300с, iotop показывает, что идет чтение с диска.
- нет, происходит FULL SCAN.
правка конфига поможет, если захотите поиграться с размерами кэша. Пока проблема, похоже, именно в индексах.