我正在尝试执行连接删除操作,但超时了。不确定这是交叉连接问题还是我的机器上的 MySQL 问题。 win 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 )
最佳答案
您需要在两个表中的 __stock 列上添加索引。
关于mysql删除连接无故失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42726143/