查询在记录数低的表上花费很长时间

Pie*_*erk 3 performance oracle-11g-r2 query-performance

我有一个 Oracle 平面表,它增长到略低于 800MB。该表被截断,正在插入新记录。目前表中有 <40 条记录,但一条select *需要 >30 秒。

这可能是因为表仍然很大(约 800MB)以至于需要很长时间?

没有索引。

编辑

我从清理桌子的人那里发现他们做了一个delete而不是一个truncate

Jus*_*ave 5

如果查询计划涉及全表扫描,则 Oracle 必须读取表中的每个块直到其高水位线 (HWM)。如果 HWM 下有 800 MB 的块,那么读取所有数据需要 30 秒是完全合理的。在这种情况下,实际包含数据的块的数量是无关紧要的。

但是,如果您截断了表,则除非您指定REUSE STORAGE哪个不是默认值,否则您应该重置 HWM 。表仍然是 800 MB 的事实意味着您REUSE STORAGETRUNCATE命令中明确包含 a或者您实际上没有截断表 - 例如,也许您只是执行DELETE了删除所有数据的操作。ADELETE不会重置 HWM。

  • 清除表的人确认他们只执行了删除而不是截断。我们缩小了桌子,性能又回到了预期。 (2认同)