首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dbforge的mysql优化(解释)

使用dbforge的mysql优化(解释)
EN

Stack Overflow用户
提问于 2014-06-05 18:18:33
回答 1查看 276关注 0票数 0

我正在使用dbForge审查我的查询,以确保它们尽可能地优化或优化。我有下面的东西,我几乎所有的东西都用它,只要我正确阅读,结果就会吓到我。

数据库设置的基本依据是帐户、计算机、用户(链接到用户的表)。任意数量的计算机都链接到一个帐户,有任意数量的用户链接到每台计算机,所有其他表都链接到用户。

我使用以下方法只返回“活动”计算机的结果。通过提供:account_id和:account_licenses,我可以做到这一点。例如,1和3只返回帐户1的前3台计算机(按其id排序)的结果,希望这是有意义的。

代码语言:javascript
复制
SELECT *
FROM
( SELECT account_id, computer_id
    FROM computers
    WHERE account_id = :account_id
    ORDER BY computer_id ASC LIMIT 0, :account_licenses
) as c
INNER JOIN users
    on users.computer_id = c.computer_id

...further joins which act on user_id

来自dbforge的结果吓到我了:

代码语言:javascript
复制
table        id     select type    type    possible keys    key    key len    ref    rows    extra
<derived2>  1   PRIMARY ALL                 5   
computers   2   DERIVED ALL unique_filter   unique_filter   4       14  Using filesort
users   1   PRIMARY ref unique_filter   unique_filter   4   c.computer_id   1

令我害怕的是,计算机表似乎在扫描其表(14)中的每一行。14是当时这个特定表中的行总数(我只是测试的数据不多),但是当数据增加时,我肯定不想每次都扫描整个表。

这到底是发生了什么,还是我看错了?

编辑:

抱歉,应该注意到指数.accounts.account_id,computers.account_id,computers.computer_id,users.computer_id,users.user_id

EN

回答 1

Stack Overflow用户

发布于 2014-06-05 18:26:31

这听起来像我指出的显而易见的,但你没有在你的问题文本中提到索引。

如果account_id上没有索引,查询可能会扫描整个计算机表。一些SQL进程可能仍然会扫描整个表,如果其中只有几行,而14行就是我所称的“不多行”。

我认为你能做的最好的事情就是检查索引,在表中添加很多记录(比如50-100),然后测试它的效率。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24067356

复制
相关文章

相似问题

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