我正在运行一个简单的
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
为什么这么简单的查询需要花费很多时间才能完成?在哪里寻找瓶颈?
UPDATE.时间是INT(11)字段,不涉及转换.
UPDATE.可能的解决方案是引入(userId,time)索引,它通过将部分数据移动到索引树来解决问题.但它并没有解决为什么总结30000个整数需要这么长时间的更大问题.
这个问题没有一个简单的答案.指数是正确的,不涉及耗时的转换.这只是关于DB eninge tuning – 为什么找到那些30000条记录并检索数据需要花费很多时间?
重要的是说使用InnoDB引擎的表并且拥有大约200万条记录.
最佳答案 尝试为userId制作索引,这样可以解决您的问题:
ALTER TABLE game_attempts ADD INDEX (userId);