首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的MySQL查询需要很长时间

简单的MySQL查询需要很长时间
EN

Stack Overflow用户
提问于 2009-04-18 17:37:55
回答 4查看 428关注 0票数 0

我们正在运行一系列游戏的统计网站,但在日志超过100兆之后,事情开始变慢,所以我们需要优化我们的查询。

然而,我们发现我们认为是一个简单的查询,大约需要1.5秒:

代码语言:javascript
复制
SELECT handle,
(
    SELECT COUNT(*)
    FROM kills
    WHERE killer=p.handle
    AND k_team != c_team
    AND gid=p.gid
) AS kills
FROM players as p
WHERE  gid="3245"
AND team="axis"
ORDER BY kills DESC LIMIT 0, 10;

这将为其中一个团队生成一个结果列表。

桌杀和玩家分别由36000行和4000行组成。

为什么查询花了这么长时间,如何对其进行优化?我们是不是应该研究一下JOIN?

致以最好的问候,拉卡

EN

回答 4

Stack Overflow用户

发布于 2009-04-18 17:42:52

您是否尝试过在kills表的killer列上建立索引?

编辑索引上的信息。http://www.w3schools.com/Sql/sql_create_index.asp

票数 1
EN

Stack Overflow用户

发布于 2009-04-18 17:44:10

是的,你绝对应该研究一下joins。很难从您发布的代码片段中辨别出来,但无论何时可以对子查询使用连接,这样做都是有益的。

您可能还想考虑在数据库中的其他地方缓存kill count;特别是如果您正在使用InnoDB,SELECTing ()操作比简单地从数据库中缓存一个相对较新的值要花费更多的时间。您可能可以通过在适当的记录上递增kill count或类似的东西,在代码中轻松地实现这一点。

票数 0
EN

Stack Overflow用户

发布于 2009-04-18 17:46:00

尝试:

代码语言:javascript
复制
SELECT handle, count(*) as kills
FROM players as p
JOIN Kills as k ON k.gid = p.gid
WHERE  gid="3245"
AND team="axis"
ORDER BY kills DESC LIMIT 0, 10;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/763815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档