Mysql:查询在具有相同配置的另一台 PC 上不起作用

Posted

技术标签:

【中文标题】Mysql:查询在具有相同配置的另一台 PC 上不起作用【英文标题】:Mysql: Query not working on another PC with the same config 【发布时间】:2014-07-30 09:11:35 【问题描述】:

我有一个查询在我当前的 PC 上运行良好,这是我的开发 PC,但不是在生产环境中。

两个环境具有相同的材质配置。 数据库的设置是一样的。

在开发中,查询在不到 30 秒内执行,但是当我在生产环境中尝试时,即使 2 小时后我也没有得到结果。

这是执行时服务器上唯一正在运行的查询。

你知道为什么会这样吗?

SELECT td.td_date,
       td.td_number,
       td.td_status,
       td.td_open_datetime,
       td.td_update_datetime,
       Min(ack.ackup) ackUpdate
FROM   t_ticketdossier_td td
       INNER JOIN (SELECT a.td_number,
                          a.td_update_datetime ackUp
                   FROM   t_ticketdossier_td a
                   WHERE  a.td_status = 'Acknowledged') ack
               ON td.td_number = ack.td_number
                  AND td.td_update_datetime <= ack.ackup
WHERE  td.td_number IN (SELECT td_number
                        FROM   t_ticketdossier_td base
                        WHERE  Date(base.td_date) = @date
                               AND base.td_status = 'Acknowledged'
                               AND base.td_scope IS NULL
                               AND base.td_subcategory NOT LIKE '%RDV%'
                               AND base.td_product_type NOT LIKE '%RDV%'
                        GROUP  BY td_number)
       AND td.td_status = 'Affected'
GROUP  BY td.td_date,
          td.td_number,
          td.td_status,
          td.td_update_datetime

Explain from the dev server.

Explain from the prod server.

抱歉链接,我没有足够的声誉直接发布图片。

干杯, 马克西姆。

【问题讨论】:

我怀疑生产服务器的数据比你的开发电脑多。 PLs 检查你的开发者的所有索引。环境也是在生产环境中创建的。 你能告诉我们查询的一些部分吗? 生产服务器和开发服务器的数据是一样的。所有的指标也是一样的。我制作了一个转储文件并将其导入我的开发服务器。 @MaximeMangel 当您比较两台机器上的EXPLAIN 语句时,它们有什么不同吗? 【参考方案1】:

从我在EXPLAIN 语句中看到的情况来看,您的生产数据库似乎遗漏了很多索引。

例如: TD_STATUS_IDX,TD_NUMBER_IDX

尝试添加这些并再次运行EXPLAIN

【讨论】:

是的,这似乎是合乎逻辑的。但是当我执行SHOW INDEXES FROM t_ticketdossier_td 时,我得到相同的输出,只是基数不同。 他们有什么方法可以重建索引吗?还是强制使用它们? @MaximeMangel 你可能想试试forcing it to use your index。 我尝试通过指定 TD_NUMBER_IDX 作为索引来使用强制索引。 And I got this。但是正如你所看到的,这个索引是用于table td的......为什么他甚至不想强制使用它?

以上是关于Mysql:查询在具有相同配置的另一台 PC 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

当我从 LAN 上的另一台 PC 浏览时,我的 ReactJS/Django(Rest API) 提示 Unhandled Promise 拒绝

MySQL sum 和 distinct 在具有多个连接的另一列上

在另一台 PC 上出现错误消息“禁止您无权访问 / 在此服务器上”

从表中选择行,其中具有相同 id 的另一个表中的行在另一列中具有特定值

我的 ionic 应用程序无法连接到手机上运行的 MYSQL 数据库,但在具有 localhost 的 PC 上它将运行

我如何从另一台服务器的另一个数据库中获取数据? [复制]