mysql删除加入无故失败?

mysql delete join fails for no reason?

我正在尝试执行加入删除操作,但超时了。不确定这是交叉连接问题还是我的盒子上的 MySQL 问题。 win 7 64,MySQL 5.7.17 社区。

上次出现此问题并自行解决时,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)

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

我已将 innodb 翻转到 myisam 并返回,删除 table 并重新创建,从 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条记录

只是在一个更大的数据集上进行了类似的删除连接,没有问题,但其他 tables 具有很好的主键一致性(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 )

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