mariadb INSERT INTO SELECT非常慢,但INSERT或SELECT单独运行时速度很快

arknldoa  于 2023-04-06  发布在  其他
关注(0)|答案(2)|浏览(391)

我有一个这样的SQL:

INSERT INTO table1 (column1, column2) (
    SELECT column3, column4 FROM table2 WHERE column5 = 'value'
);
  • table1有3,500,000行。
  • table2有900,000行。
  • SELECT column3, column4 FROM table2 WHERE column5 = 'value'返回NO寄存器(ZERO),耗时约0.004秒。
  • INSERT INTO table1 (column1, column2) VALUES ('value', 'value')也需要约0.004秒。

但是当我在一个INSERT INTO SELECT语句中合并这两个语句时,如上所示,需要大约7.7秒。有解释吗?有解决方案吗?

mu0hgdu0

mu0hgdu01#

有时候执行INSERT和SELECT时性能会变慢,因为原始表中的字段类型与destiny表中的字段类型不同,所以当执行INSERT-SELECT时,会对SELECT中的值进行隐式转换,以便它们可以持久化在destiny表中。这种隐式转换并不是以最佳的性能方式进行的,并且有时候从值直接插入会变慢。

xoefb8l8

xoefb8l82#

我遇到了一个类似的问题是做一个复杂的查询,检索超过100k行,选择是相对快,但插入是极其缓慢的。我缩小了问题的数量被插入的行49k是最大的对我来说,插入是去快,但50k行需要30倍的时间插入,我通过将查询拆分为多个行查询来解决这个问题,我认为这是一个innodb问题(一些内部缓冲区可能会进入磁盘而不是内存),大大减慢了插入速度。

相关问题