我使用的数据库版本是oracle 9.2.0.1.0 for aix,数据库内表photo_t 存放相片。
在表photo_t 的photo_no字段(field)上建有索引pk_photo_no。 
我们使用powerbuilder 编写的前端访问数据库的应用程序,程序中包含如下sql语句:string ls_photo_no
blob   lb_photo//向表photo_t 插入一条纪录
insert into photo_t (photo_no,photo)
values (:ls_photo_no,empty_blob());
//插入相片
updateblob photo_t 
set photo= :lb_photo
where photo_no = :ls_photo_no;在表内存放了 70,000,000张相片的情况下,程序运行正常,两条语句的执行速度小于0.1秒。
之后由于表空间(tablespace)不够,删除了8,000,000条纪录,程序的运行速度明显下降:
第一条sql 语句速度很快,但第二条执行时间很长(3秒)。我们对photo_t 所在的tablespace 进行了空闲空间整理,重建了索引 pk_photo_no,仍然不起作用。请帮忙分析原因,谢谢!

解决方案 »

  1.   

    我已重建过索引pk_photo_no 了,并且重建后也进行了表分析,仍然不起作用。由于存储容量太大,所以没有合适的存储设备存放导出数据,请问有没有其他方法?。另外我觉得奇怪的是为什么在空间不足继而删除纪录后,性能会突然下降,而不是逐渐下降?
      

  2.   

    ORACLE踩用的是段式管理,删除后没有释放高位
      

  3.   

    可以执行带条件的备份方法导出数据库数据,然后drop table z再导入数据,应该能解决,因为delete 记录后,oracle 的高位水平标志是不变的。
      

  4.   

    insert不慢,但update慢,会不会是row migration的问题,如果表及相关对象不复杂的话,建议导出导入一下!