2010-12-10 40 views
10

我有一個oracle數據庫中有15個字段的表。 該表具有3500000個插入。我全部刪除了它們。在空表中執行緩慢的查詢。 (刪除大量的插入後)

delete 
from table 

在那之後,每當我執行SELECT語句
我得到一個非常緩慢的響應(7秒),即使表是空的。 只有在根據索引字段搜索 的情況下,我才能得到正常響應。

爲什麼?

回答

7

由於Gritem說,你需要了解高水痕等

如果您現在不想truncate表(因爲新數據已被插入),請使用alter table xyz shrink space記錄here for 10g

-3

在sql中當你想完全清除一個表時,你應該使用truncate而不是delete。假設您的表格中包含350萬行,並且每行bigint列上都有一個索引(唯一標識符)。截斷表將完全清除表並將索引重置爲0.刪除將不會清除索引,並且在插入下一條記錄時將以3,500,001繼續。截斷也比刪除快得多。閱讀以下文章以瞭解差異。

閱讀本文Read this article解釋了截斷和刪除之間的區別。有時可以使用每一個。 Here是Oracle的另一篇文章。

+2

-1用於調用一個索引'唯一標識符',當問題沒有提到索引時,在Oracle問題中談論'bigint',並以某種方式接受你的答案 – 2010-12-10 15:48:42

+0

所有三個答案都令我滿意。我接受了這個答案,因爲這讓我更清楚地瞭解我所問的內容,並給了我2條文章鏈接,以便更詳細地瞭解它。我檢查了所有這些,發現答案比其他答案更完整。 – 2010-12-12 12:15:05