您的位置:首页 > 数据库

简单sql调优问题

2016-08-22 22:16 253 查看
一条简单sql,返回记录是0,但执行却消耗了63s,



执行计划:



表有655518记录

表的索引:



原因分析:

     1、高水平问题引起

     2、全表扫描的问题,

解决办法:

第一种:收缩表空间

alter table DOM_3_DOCLIB enable row movement; --开始行迁移,因为shrink时rowid会变

alter table DOM_3_DOCLIB shrink space cascade ;

alter table DOM_3_DOCLIB disable row movement;  --结束后关闭航迁移

 表比较多,直接用SQL语句将要shrink表的命令拼接出来准备好.

执行的时候报:



原因有事务进行,不能获取锁!

第二种:move表,再rebulid索引

最彻底的方法是move,不过索引会失效,需要rebuild.

表的数据跨多个数据文件的话效果不如move彻底。如果没有跨数据文件效果几乎一样。

重建索引如果是很大的表:

有ONLINE选项,对生产的影响也减小了点,但影响是有的,可以找闲时来做

创建索引:

create index IDX03_WDDOC_INFO on DOM_3_DOCLIB (SYS_ISKEEP, SYS_FOLDERID)

  tablespace USERS

  pctfree 10

  initrans 2

  maxtrans 255

  storage

  (

    initial 64K

    next 1M

    minextents 1

    maxextents unlimited

  );

      


查看执行计划



        收集一下统计信息,然后查看一下空块的数量



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: