クエリのプロファイルを作成して、何が起こっているのかを正確に確認してみませんか?
SET PROFILING = 1;
SET profiling_history_size = 0;
SET profiling_history_size = 15;
/* Your query should be here */
SHOW PROFILES;
SELECT state, ROUND(SUM(duration),5) AS `duration (summed) in sec` FROM information_schema.profiling WHERE query_id = 3 GROUP BY state ORDER BY `duration (summed) in sec` DESC;
SET PROFILING = 0;
EXPLAIN /* Your query again should appear here */;
これは、クエリに時間がかかる場所を正確に把握し、結果に基づいて最適化操作を実行するのに役立つと思います。