gpt4 book ai didi

使用 dbforge 进行 mysql 优化(解释)

转载 作者:行者123 更新时间:2023-11-29 12:55:57 24 4
gpt4 key购买 nike

我正在使用 dbForge 检查我的查询,以确保它们是最佳的或尽可能最佳的。我有以下内容,几乎可以用于所有事情,只要我正确阅读它们,结果就会让我有点害怕。

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

我使用以下命令仅返回来自“事件”计算机的结果。通过提供 :account_id 和 :account_licenses 我可以做到这一点。例如,1 和 3 只会返回帐户 1 的前 3 台计算机(按 ID 排序)的结果。希望这是有道理的。

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 的结果让我害怕:

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

最佳答案

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

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

我认为您能做的最好的事情就是检查索引并向表中添加大量记录(例如 50-100 条),然后测试其效率。

关于使用 dbforge 进行 mysql 优化(解释),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24067356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com