【发布时间】:2011-07-19 10:56:00
【问题描述】:
我想知道是否有人可以帮助我理解以下查询执行行为:
我有两个相似的表,table2 包含 5000000 条记录。
查询:INSERT INTO table1 SELECT * FROM table2。 执行时间:A ms。
查询:INSERT INTO table1 SELECT * FROM table2。 执行时间:B ms。
有时 B >> A(B 比 A 大得多)。两个查询是相同的并且运行两次。同一查询需要很长时间的原因可能是什么?
非常感谢!
【问题讨论】:
-
我认为内存问题。在第一个表之后,它只是用完内存来缓冲执行。你有没有尝试切换A然后B到B然后A?
-
您是否在每个语句后发出显式的 BEGIN COMMIT 命令?您至少需要提供解释计划。
-
没有限制。一列是主键,并且有索引。我无法比较 INSERT 和 SELECT 案例。我认为这不是内存问题,因为我重新启动了机器(以清除缓存数据)并运行查询。但是,它花费的时间更少。我为我的工作运行了大约 20 次相同的查询,我观察到这种行为(长执行时间)大约 6-7 次。我正在尝试与 EXPLAIN ANALYZE 一起重新生成此案例。
-
另外,我没有使用 BEGIN COMMIT 命令。但是,我在 PostgreSQL 文档中读到,默认情况下每个命令都是自动提交的。
标签: postgresql