2010-10-04 226 views
1

我试图在包含10,000行的表上执行以下语句,但查询是永久执行的。 ('H','R')中的col1('A','B','C')和col2('K','L','M')中的col1以及col3中的col1删除表_A ,D')Oracle IN条件很慢

请任何人都可以协助!

感谢 一个

回答

1

看起来好像另一会话已锁定你要删除的行之一。

有人在同一张桌子上工作(交易持续时间超过几秒钟)吗?或者你有没有提交更改的其他工具或会话?

更新

的另一个问题是外键是没有正确索引:如果其他表有外键,你要删除的行的表,如果这些外键列表没有索引,那么Oracle会尝试锁定这些表。这可能是原因。如果是这种情况,请索引这些列。

+0

没有其他人在使用会话,并且没有任何未提交的事务。只是想知道是否有其他方式来编写这个查询? – webdevguy 2010-10-04 09:15:12

+2

几乎不可能的是,具有10'000行的表上的删除语句需要超过5秒。您需要提供更多信息:“永久执行”持续多久?这张桌子上有触发器吗?该表是否包含巨大的BLOB或CLOB值?你有大量的指数吗? – Codo 2010-10-04 09:41:11

1

数据库挂起的另一个可能原因是存档日志目标已满。 查询V $ SESSION_WAIT和V $ SESSION_EVENT视图以查看会话等待的内容。