今日对一个表数据库进行清理 ,而表的两列,id1,id2其中id1为主键,而id2 为外键到自身表的id1列。
现在有需求需要删除表的数据,包含时间列。时间列包含索引。
在执行delete操作发现,数据库等待事件为scattered read,明显为全表扫描。表示很诧异。
使用event 10046对会话进行跟踪
oradebug setospid xxxx
oradebug event 10046 trace name context forever,level 12;
oradebug tracefile_NAME
tkprof xxx.trc 123.html
分析trc文件发现,执行的sql语句如下:
发现本身表示存在on delete set null 外键。相当于执行了delete 在执行update;所以缓慢