【发布时间】:2010-12-10 11:11:19
【问题描述】:
我在 oracle 数据库中有一个包含 15 个字段的表。 该表有 3500000 次插入。我都删了。
delete
from table
之后,每当我执行一个选择语句
即使桌子是空的,我的反应也很慢(7 秒)。
只有在我搜索的情况下我才会得到正常响应
根据索引字段。
为什么?
【问题讨论】:
标签: oracle indexing performance response
我在 oracle 数据库中有一个包含 15 个字段的表。 该表有 3500000 次插入。我都删了。
delete
from table
之后,每当我执行一个选择语句
即使桌子是空的,我的反应也很慢(7 秒)。
只有在我搜索的情况下我才会得到正常响应
根据索引字段。
为什么?
【问题讨论】:
标签: oracle indexing performance response
正如 Gritem 所说,您需要了解高水位标记等
如果您现在不想truncate 表(因为已插入新数据),请使用alter table xyz shrink space 记录的here 10g
【讨论】:
Tom Kyte 对这个问题有很好的解释:
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 观点的文章。
【讨论】:
bigint,并以某种方式让您的答案被接受