【发布时间】: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__);