2010-10-04 230 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視圖以查看會話等待的內容。