【发布时间】:2011-01-30 12:21:36
【问题描述】:
我有一个以前有大量行的空表。
该表有大约 10 个列和其中许多列上的索引,以及多个列上的索引。
DELETE FROM item WHERE 1=1
这大约需要 40 秒才能完成
SELECT * FROM item
这需要 4 秒。
SELECT * FROM ITEM的执行计划如下;
SQL> select * from midas_item;
no rows selected
Elapsed: 00:00:04.29
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=19 Card=123 Bytes=73
80)
1 0 TABLE ACCESS (FULL) OF 'MIDAS_ITEM' (Cost=19 Card=123 Byte
s=7380)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
5263 consistent gets
5252 physical reads
0 redo size
1030 bytes sent via SQL*Net to client
372 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
任何想法为什么这些会花费这么长时间以及如何解决它将不胜感激!
【问题讨论】:
-
你能告诉我这张表有多少数据(行)吗?
-
是否还有其他空表通过外键引用该表?
-
我上次清理时,该表大约有 200k 行。虽然它比过去有更多的东西(在它的生命周期中可能有 200 万个差异行)
-
您已经给出了 SELECT 的计划和统计信息,但 DELETE 呢?
标签: sql performance oracle plsql