Mysql 慢速查询会占用整个硬盘空间,导致;1030从存储引擎获取错误28“;
对MySQL来说是相当新的 慢速查询会占用整个硬盘空间,最终导致1030个错误代码Mysql 慢速查询会占用整个硬盘空间,导致;1030从存储引擎获取错误28“;,mysql,sql,innodb,mysql-error-1030,Mysql,Sql,Innodb,Mysql Error 1030,对MySQL来说是相当新的 慢速查询会占用整个硬盘空间,最终导致1030个错误代码 INSERT INTO schema.Table C SELECT a.`Date`, a.Store, a.SKU, floor((a.QTY / ((b.CASEQTY * b.CASEPERLAYER) * b.LAYERPERPALLET))) AS Pallets, floor(((a.QTY / ((b.CASEPERLAYER * b.LAYERPERPALLET) *
INSERT INTO schema.Table C
SELECT a.`Date`, a.Store, a.SKU,
floor((a.QTY / ((b.CASEQTY * b.CASEPERLAYER) * b.LAYERPERPALLET))) AS Pallets,
floor(((a.QTY / ((b.CASEPERLAYER * b.LAYERPERPALLET) * b.CASEQTY)) /.CASEQTY)) AS Cases,
(a.QTY * b.CASEQTY) AS Pieces
FROM
(schema.table1 AS a
INNER JOIN schema.table2 AS b)
WHERE a.Description = 'BLAH';
问题:
当我运行上面的查询时,我在0.01秒内得到了所需的结果,限制为100行。但是,当我尝试将查询插入到准备好的表中时,它失败了
上述查询将基本上运行数小时,直到硬盘驱动器已满。表A包含数百万条记录,而表B只有几千条。存储引擎是InnoDB。我已经运行了3小时类似的查询,并且成功了。任何帮助都将不胜感激。这是MySQL的一大特色。尽管称之为内部联接,但您可以通过省略ON子句来执行交叉联接,而ON子句正是您正在执行的操作。(另一个dbms将引发语法错误。)
因此,通过不指定ON子句来匹配表1和表2中的记录,就可以将表1中的每条记录与表2中的每条记录进行匹配。这些可能有很多:-)您的内部连接语句不包含连接条件。这将导致被称为“笛卡尔积”的东西(不好)。因此,如果表A有一百万条记录,而表b有一千条记录,那么笛卡尔积将表A中的每一行与另一个表中的每一行相匹配。这会给你(至少)10亿条记录
要解决这个问题,您需要使用一个“ON”子句来定义/约束两个表之间的关系,否则它可能会出现在WHERE子句中。我完全忘记了ON子句!谢谢你指出这一点!我花了3天时间试图弄清楚为什么会发生这种情况,我认为这与InnoDB引擎有关。