2011-03-21 176 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