我正在运行一个简单的 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
PROFILER 显示,大部分时间都花在“发送数据”上:
Sending data 1.786524
为什么这么简单的查询需要这么长时间才能完成?在哪里寻找瓶颈?
更新。时间是 INT(11) 字段,不涉及转换。
更新。可能的解决方案是引入 (userId, time) 索引,通过将部分数据移动到索引树来解决问题。但它并没有解决更大的问题,即为什么总结 30000 个整数需要这么长时间。
这个问题没有一个简单的答案。指数是正确的,不涉及耗时的转换。这只是关于数据库引擎调整——为什么定位这 30000 条记录和检索数据需要这么多时间?
重要的是要说该表使用 InnoDB 引擎并包含大约 200 万条记录。