私は更新に10時間かかっている更新クエリを持っていますが、更新ステージ自体には約135171レコードしかありません。oracle pl/sqlの更新クエリ
uPDATE hr.raw_address ora
SET (ora.addr_id,
) =
(SELECT oms.addr_id
FROM hr.addresss_oet OMSS,
hr.master_address oms
WHERE NVL (oms.addr_line1, '-1') = NVL (OMSS.addr_line1, '-1')
AND NVL (oms.addr_line2, '-1') = NVL (OMSS.addr_line2, '-1')
AND NVL (oms.city, '-1') = NVL (OMSS.city, '-1')
AND NVL (oms.state, '-1') = NVL (OMSS.state, '-1')
AND NVL (oms.pstl_id, '-1') = NVL (OMSS.pstl_id, '-1')
AND ORA.ADDR_KEY = OMSS.ADDR_KEY
)
WHERE ora.addr_id IS NULL;
マスターテーブル(master_address約136000レコードを有する)と参加がOET(address_oet)テーブル、マスターテーブルに基づいて、アドレスフィールドに基づいて結合されています。アドレスが一致すると、マスターテーブルからそれぞれのaddr_idを取り出し、oetテーブルとrawテーブルのaddr_keyの組み合わせに基づいてrawテーブルのaddr_idを更新します。しかし、すでに9時間ですが、まだ更新が実行されています。
あなたのアップデートが待っているブロックロックがないことを確認しましたか?ありがとう – alexgibbs
テーブルにブロックセッションがありません。レコードを1つしか取っておらず、テーブルを更新しようとしましたが、秒間に更新されました。テーブルにブロックセッションがないと仮定できます。 –
ですので、rawテーブルの各レコードに対して、更新する必要があります。マスターテーブルのすべての136000レコードをスキャンする必要があります。 1000レコードを更新する必要がある場合は、136 000 000のマスターレコードをスキャンする必要があります。すべての135171レコードを更新する必要がある場合は、135171 * 13600〜18 000 000 000レコードをスキャンする必要があります。 – miracle173