我正在运行一个简单的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个整数需要那么长时间的更大问题。
这个问题没有简单的答案。索引是正确的,没有耗时的转换。这只是关于DB引擎调优的问题——为什么定位这30000条记录和检索数据需要这么长时间呢?
重要的是说,表使用InnoDB引擎,包含约200万条记录。