首页 > 数据库 > Oracle > 一个简单的delete 优化
昨天在客户现场,同事一个简单的delete 语句,发现竟需要30s以上的时间,整个数据库资源占用也很高。
同事讲,对应的列已经创建索引了。
就检查了下。发现存在一个普遍的设计问题。
具体如下:
[@more@]删除语句:
delete from t_a t where t.id= 40000;
检查表t_a,在id上创建了索引。
执行计划也会使用这个索引。但执行起来就很慢。
刚开始以为这个索引的值分散,就把索引修改为反向索引。
执行计划是比一般索引快。但总的执行时间没有减少太多。
只好去设置sql trace.
结果发现,当执行上述delete 时,除删除t_a外,还有一个删除
t_b表的语句。
所以,明白是由于这个表是其它表的主表。因为,当删除主表时,会级联删除次表。导致删除慢。
在次表上对应的column上创建索引,整个删除只需要1s就可以完成。
从此,也可以看出在使用关联时,不应只关注主表,次表也是要注意的。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/197458/viewspace-1015738/ ,如需转载,请注明出处,否则将追究法律责任。