ORACLE表加载速度

时间:2011-06-22 12:54:51

标签: oracle

这是一个我以前没有遇到过的新问题。

我有一个表,一次包含超过100k的记录,它是开发环境的事件日志。

加载表格需要10秒钟(只需单击它即可查看表格中的数据)。

我删除了除30行以外的所有内容,但仍需要7秒才能加载。

我正在使用Toad,它给了我一个对话框,上面写着“Statement Processing ...”

有什么想法吗?

以下是一些选择陈述以及他们花了多长时间

select * from log;  21 rows in 10 secs
select * from log where id = 120000; 1 row in 1 msec
select * from log where user = 35000; 9 rows in 7 sec

id是pk,用户字段上没有索引。

我有一个表视图,其中包含位于此表顶部的所有字段,并且运行速度也很慢。

2 个答案:

答案 0 :(得分:5)

如果您发出“select * from event_log_table”,那么您将使用全表扫描扫描整个表。它必须扫描所有已分配的段以查看其中是否有行。如果您的表一次包含超过100K行,那么它至少分配了足以容纳那些100K +行的空间量。请参阅:http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/schema.htm#sthref2100

现在,如果删除行,则仍会为此表分配空间,Oracle仍需扫描所有空间。它的作用就像一个高水位。

要减少高水位线,您可以发出TRUNCATE TABLE命令,该命令会重置高水位线。但是你会失去所有的行。

可以选择缩小表格中的空间。你可以在这里阅读它及其前提条件: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_3001.htm#sthref5117

的问候,
罗布。

答案 1 :(得分:0)

如果您开始使用100M记录表,我会更好地理解这一点。但为了以防万一,请尝试运行Oracle统计数据。如果这没有帮助,请删除并重新创建该表上的索引。