ユーザーがゲームのプレイに費やした合計時間を見つけるために、単純な MySQL クエリを実行しています。
SELECT userId, SUM(time) AS totalGameTime
FROM game_attempts
WHERE userId = 19599
EXPLAIN は以下を示します。
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE game_attempts ref userId_gameId userId_gameId 4 const 26880
プロファイラーは、ほとんどの時間が「データの送信」に費やされていることを示しています。
Sending data 1.786524
なぜこのような単純なクエリを完了するのに時間がかかるのでしょうか? ボトルネックを探す場所
アップデート。時刻は INT(11) フィールドであり、変換は含まれません。
アップデート。考えられる解決策は、(userId, time) インデックスを導入することです。これは、データの一部をインデックス ツリーに移動することで問題を解決します。しかし、なぜ 30000 個の整数を合計するのに時間がかかるのかという大きな問題は解決しません。
この質問には簡単な答えはありません。インデックスは正しく、時間のかかる変換は必要ありません。それは単に DB エンジンのチューニングに関するものです。30000 レコードを見つけてデータを取得するのになぜそんなに時間がかかるのでしょうか?
重要なのは、InnoDB エンジンを使用したテーブルで、約 200 万のレコードが含まれていることです。