我有一個oracle數據庫中有15個字段的表。 該表具有3500000個插入。我全部刪除了它們。在空表中執行緩慢的查詢。 (刪除大量的插入後)
delete
from table
在那之後,每當我執行SELECT語句
我得到一個非常緩慢的響應(7秒),即使表是空的。 只有在根據索引字段搜索 的情況下,我才能得到正常響應。
爲什麼?
我有一個oracle數據庫中有15個字段的表。 該表具有3500000個插入。我全部刪除了它們。在空表中執行緩慢的查詢。 (刪除大量的插入後)
delete
from table
在那之後,每當我執行SELECT語句
我得到一個非常緩慢的響應(7秒),即使表是空的。 只有在根據索引字段搜索 的情況下,我才能得到正常響應。
爲什麼?
由於Gritem說,你需要了解高水痕等
如果您現在不想truncate
表(因爲新數據已被插入),請使用alter table xyz shrink space
記錄here for 10g
湯姆凱特有這個問題的一個很好的解釋:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:492636200346818072
它會幫助你理解刪除,截斷和高水印等
在sql中當你想完全清除一個表時,你應該使用truncate而不是delete。假設您的表格中包含350萬行,並且每行bigint列上都有一個索引(唯一標識符)。截斷表將完全清除表並將索引重置爲0.刪除將不會清除索引,並且在插入下一條記錄時將以3,500,001繼續。截斷也比刪除快得多。閱讀以下文章以瞭解差異。
閱讀本文Read this article解釋了截斷和刪除之間的區別。有時可以使用每一個。 Here是Oracle的另一篇文章。
-1用於調用一個索引'唯一標識符',當問題沒有提到索引時,在Oracle問題中談論'bigint',並以某種方式接受你的答案 – 2010-12-10 15:48:42
所有三個答案都令我滿意。我接受了這個答案,因爲這讓我更清楚地瞭解我所問的內容,並給了我2條文章鏈接,以便更詳細地瞭解它。我檢查了所有這些,發現答案比其他答案更完整。 – 2010-12-12 12:15:05