【问题标题】:mysql delete join fails for no reason?mysql删除连接无缘无故失败?
【发布时间】:2017-03-10 19:18:50
【问题描述】:

我正在尝试执行连接删除,但它超时。不确定这是我的盒子上的交叉连接问题还是 MySQL 问题。赢得 7 64,与 MySQL 5.7.17 社区。​​p>

上次出现 vipre av 与 Trend wfb 9 竞争时遇到问题并自行解决(当时正在测试 AV 产品,我知道您不应该安装 2)。我正计划将我的小型数据集市迁移到 MySQL,但无法弄清楚是什么导致了这个问题,如果我无法弄清楚发生了什么,我就无法将所有内容都基于 MySQL。

所以一直超时的SQL是:

DELETE prod
FROM cmdata.vauto_feed_options as prod
INNER JOIN cmdata.vauto_feed_options_cache stage
using ( stock__ )

delete prod
FROM cmdata.vauto_feed_options as prod
INNER JOIN cmdata.vauto_feed_options_cache stage 
ON ( prod.stock__ = stage.stock__
AND prod.vin = stage.vin)

或许多其他组合,但没有运气。 该表没有自然主键,唯一的复合键是所有字段。这是数据 ELT 的一部分,我只想删除旧数据的所有痕迹并为到达的记录加载新数据,同时保留不只是作为文本文件发送的旧记录(因此没有截断表)。

我已将 innodb 翻转到 myisam 并返回,删除表并重新创建,从 av 扫描中排除路径,禁用 av,删除 av(防病毒)。我添加 va_option_id 作为自动编号 pk 只是为了拥有一个。

新数据包含每个 vin 和股票组合 50 到 100 条记录,并且特征文本不同(地垫、DVD 播放器等)。实际上从 csv 文件中的单个字段标准化为我的存储行。

delete prod CREATE TABLE `vauto_feed_options` (
  `va_option_id` int(11) NOT NULL AUTO_INCREMENT,
  `Stock__` varchar(10) NOT NULL,
  `VIN` varchar(17) NOT NULL,
  `Features` varchar(200) NOT NULL,
  PRIMARY KEY (`va_option_id`)
) ENGINE=InnoDB AUTO_INCREMENT=297269 DEFAULT CHARSET=utf8;

296303 条记录

CREATE TABLE `vauto_feed_options_cache` (
  `Stock__` varchar(10) DEFAULT NULL,
  `VIN` varchar(17) DEFAULT NULL,
  `Features` varchar(200) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

58151 条记录

刚刚在更大的数据集上进行了类似的删除连接,没有问题,但其他表具有很好的主键一致性(1 到 1)

delete prod 
FROM tblname_cache 
INNER JOIN  tblname as prod 
ON (  prod.company_number = tblname_cache.company_number 
AND  prod.record_key = tblname_cache.record_key )

【问题讨论】:

  • 猜测它可能是上面隐含的新交叉连接,带有独特特征文本的 vin 和 stock 连接到具有 50 到 100 个其他独特特征值的另一个 vin 和 stock 组合。设置时间戳=1489169267;删除 cmdata.vauto_feed_options FROM cmdata.vauto_feed_options , cmdata.vauto_feed_options_cache 其中 cmdata.vauto_feed_options.stock__ = cmdata.vauto_feed_options_cache.stock__ AND cmdata.vauto_feed_options.vin = cmdata.vauto_f [截断,总共 278 字节]
  • 开始时间、User@Host、查询时间、锁定时间、发送的行数、检查的行数、详细信息 2017-03-10T18:07:47, root[root] @ localhost [127.0.0.1] Id : 4, 241.833845, 0.000000, 0, 302843058,
  • 还尝试从每个 vin + stock 组合有 1 条记录的主要详细记录中删除,它也超时。删除 opt FROM cmdata.vauto_feed_options opt INNER join vauto_feed_vehicles_cache veh on( opt.stock__ = veh.stock__);

标签: mysql mysql-5.7


【解决方案1】:

您需要在两个表中的 __stock 列上添加索引。

【讨论】:

  • 那行得通。删除需要 30 秒,但比失败超时要好。在 MS SQL 中没有这个问题。
猜你喜欢
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多