现在的位置: 首页 > 综合 > 正文

碎片引起的查询速度变慢

2014年01月04日 ⁄ 综合 ⁄ 共 965字 ⁄ 字号 评论关闭

对一张1000多条记录的小表做count居然花了8秒多。

 

记录一下解决过程:
SQL> set timing on;
SQL> select count(1)  from t_temp;
  COUNT(1)
----------
      1227
Executed in 8.171 seconds

 

SQL> desc t_temp;
Name       Type         Nullable Default Comments
---------- ------------ -------- ------- --------
PROPOSALNO VARCHAR2(50) Y
POLICYNO   VARCHAR2(50) Y
QUERYNO    VARCHAR2(35) Y
DEMANDNO   VARCHAR2(50) Y
CONTRACTNO VARCHAR2(35) Y

 

SQL> col SEGMENT_NAME for a20;
SQL> select segment_name, sum(bytes) / 1024 / 1024 mb
  2    from user_segments u
  3   where u.segment_name in ('t_temp', 'IDX_t_temp')
  4   group by segment_name;

SEGMENT_NAME                 MB
-------------------- ----------
t_temp                296.77
IDX_t_temp            494.58

 

一共1227条数据,居然占用率296MB的空间,IDX_t_temp 将近500MB。
不用做set autotrace 和10046 了,估计是碎片惹的祸。

回收一下表空间,看看效果。
SQL> alter index IDX_t_temp shrink space;
SQL> alter table t_temp enable row movement;
SQL> alter table t_temp shrink space;
SQL> analyze    table    t_temp   estimate    statistics;

 

SQL> select count(1)  from t_temp;
  COUNT(1)
----------
      1227
Executed in 0.094 seconds

 

 

抱歉!评论已关闭.