gpt4 book ai didi

MySQL JOIN 不断超时

转载 作者:行者123 更新时间:2023-11-29 19:20:49 29 4
gpt4 key购买 nike

我目前正在尝试在本地 MySQL 数据库中的两个表之间运行 JOIN,但它不起作用。下面是查询,我什至将查询限制为 10 行只是为了运行测试。运行此查询 15-20 分钟后,它告诉我“错误代码”2013。在查询期间丢失了与 MySQL 服务器的连接。我的计算机不会进入休眠状态,并且我不会做任何事情来中断连接。

SELECT rd_allid.CreateDate, rd_allid.SrceId, adobe.Date, adobe.Id
FROM rd_allid JOIN adobe
ON rd_allid.SrceId = adobe.Id
LIMIT 10

rd_allid表有1700万行数据,adobe表有1000万行。我知道这很多,但我有一台强大的计算机。我的处理器是 i7 6700 3.4GHz,内存为 32GB。我还在固态驱动器上运行它。

有什么想法为什么我无法运行此查询吗?

最佳答案

“为什么我无法运行此查询?”

没有足够的信息来确定到底发生了什么。我们只能做出猜测和猜测。并提出一些建议。

我怀疑 MySQL 正在尝试在应用 LIMIT 10 子句之前具体化整个结果集。对于此查询,LIMIT 子句没有优化。

我们可能会猜测没有适合 JOIN 操作的索引,这导致 MySQL 执行嵌套循环连接。

我们还怀疑 MySQL 遇到了某些资源限制,导致 session 终止。可能会填满/tmp 中的所有空间(这通常会引发错误,例如“无效/损坏的 myisam 表 '#tmpNNN'” 之类的东西。或者它可能是其他一些资源限制。在不进行分析的情况下,我们'只是猜测。

MySQL 可能向错误日志 (hostname.err) 写入了一些内容。我会检查那里。

<小时/>

但是无论 MySQL 遇到什么情况(“为什么我无法运行此查询”问题的答案)

我严重质疑查询的目的。为什么要运行该查询?为什么返回特定结果集很重要?

我们可以执行几个可能的查询。其中一些将运行很长时间,而另一些则性能更高。

研究查询性能的最佳方法之一是使用 MySQL EXPLAIN。这将向我们展示查询执行计划,揭示 MySQL 将执行的操作、执行顺序以及将使用索引。

我们可以根据显示的查询,就一些可能添加的索引提出一些建议,例如在 adobe 上(id、日期)

我们可以对查询的修改提出一些建议(例如添加 WHERE 子句、使用 LEFT JOIN、合并内联 View 等。但是我们没有足够的规范来推荐合适的替代方案。

关于MySQL JOIN 不断超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42459587/

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