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 上它将运行