2011-03-21 143 views
0

我想知道,如果有人可以帮助我了解下面的查询执行行为:查询执行时间

我有两个类似的表和表2是由500万条记录。

查询:INSERT INTO table1 SELECT * FROM table2。 执行时间:毫秒。

查询:INSERT INTO table1 SELECT * FROM table2。 执行时间:毫秒。

有时B >> A(B比A大得多)。两个查询都是相同的并且运行两次。什么可能是相同的查询需要很长时间的原因?

非常感谢!

+0

我觉得内存问题。在第一个表之后,它只是从内存中运行以缓冲执行。你有尝试开关A,然后B到B然后A? – Bonshington 2011-03-21 06:52:41

+0

你是否在每条语句之后发布显式的BEGIN COMMIT命令?你会希望至少提供解释计划。 – Kuberchaun 2011-03-21 13:21:07

+0

没有限制。一列是主键,并对其进行索引。我无法比较INSERT和SELECT情况。我认为它不是内存问题,因为我重启机器(清除缓存数据)并运行查询。然而,这需要更少的时间。我为我的工作运行了大约20次相同的查询,并观察了这种行为(执行时间很长),时间约为6-7次。我正在尝试用EXPLAIN ANALYSE重新整理案例。 – pree 2011-03-21 18:31:31

回答

1

你可以做测试,并通过所有的信息,包括执行时间,表ddl出? 更重要的是,您可以在发言前查看“解释分析”,看看 这两种情况之间是否有区别。

+0

下面是表定义 - CREATE TABLE人员( staff_id整数PRIMARY KEY, first_name的字符改变(45)NOT NULL, last_name的字符改变(45)NOT NULL, ADDRESS_ID整数NOT NULL, 电子邮件字符改变(50 ), STORE_ID整数NOT NULL, 活性布尔值默认值真NOT NULL, 用户名字符改变(16)NOT NULL, 密码字符改变(40), 而不时区DEFAULT LAST_UPDATE时间戳现在()NOT NULL, 图片BYTEA ); – pree 2011-03-21 18:32:19

+0

正如我在上面的评论中发布的那样,我正在尝试重新生成该案例,我将尽快将其发布。上次我观察到,如果A是15分钟,那么B大约是2小时(A =较短的执行时间,B =较长的执行时间)。 – pree 2011-03-21 18:34:26