这是一个我以前没有遇到过的新问题。
我有一个表,一次包含超过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,用户字段上没有索引。
我有一个表视图,其中包含位于此表顶部的所有字段,并且运行速度也很慢。
答案 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统计数据。如果这没有帮助,请删除并重新创建该表上的索引。