gpt4 book ai didi

mysql - 访问超过 1000 万行的 MySQL 表 = 错误 : too many connection

转载 作者:行者123 更新时间:2023-11-29 00:57:32 26 4
gpt4 key购买 nike

我如何优化这个访问两个表的 MySQL 查询,每个表的行数都超过 1000 万?

下面的查询所做的是,它从 'users' 表中获取所有不存在于 'guests' 表中的 ID。结果这将返回超过数十万行,因此我们将其限制为每次运行至少获得 5000 个 id。有没有更好的方法来运行它,以便我们每次运行可以完成更多的工作。

    $before = date here before in time;
$now = date now;

$query="SELECT users.id
FROM users
LEFT JOIN guests ON guests.id = users.id
WHERE guests.id IS NULL AND (users.in >= '$before' AND users.in <= '$now')
LIMIT 0,5000";

在我们知道客人表中不存在哪些 ID 后,我们必须删除用户表中的那些行。所以这意味着它将运行另外 5000 次删除查询以删除所有这些 ID。

如果我们对包含超过 1000 万行数据的两个表运行此过程,我们的服务器将返回一个错误,指出它有太多连接,并且在您重新启动它之前无法再访问 MySQL 服务器。但是如果我们对包含几千行以上的两个表运行相同的过程,它不会遇到这个问题,但仍然需要一些时间。

为什么会发生这种情况,我们如何避免这种情况,同时完全优化这个过程。

最佳答案

两件事 - 检查您的软件如何处理 MySQL 连接。看起来它打开了一个持久连接,然后没有重用它,并且在每次查询之前都有一个新的连接。

其次 - 您可以修改查询以在一条语句中完成,而不是对每个用户运行单独的查询。这样只需要一个连接,所有处理都在 MySQL 端,这将能够进一步优化它。

编辑:您可以检查的另一件事是在您的查询上运行 EXPLAIN 以确保您设置了所有正确的索引(如果选择部分现在运行缓慢)。

关于mysql - 访问超过 1000 万行的 MySQL 表 = 错误 : too many connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5290214/

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