Oracle10gでこのクエリがあります。
DELETE FROM "BMAN_TP1"."CELLS_ITEM" TABLE1
WHERE EXISTS (
SELECT "CELLS_ITEM".*
FROM "BMAN_TP1"."CELLS_ITEM"
INNER JOIN "BMAN_TP1"."CELLS" ON ("CELLS_ITEM"."SET_ID"="CELLS"."SET_ID") AND ("CELLS_ITEM"."META_CELL_ID"="CELLS"."META_CELL_ID")
INNER JOIN "BMAN_TP1"."META_CELLS" ON ("CELLS"."META_CELL_ID"="META_CELLS"."META_CELL_ID")
WHERE ("META_CELLS"."UDA_ID" = variable)
AND (TABLE1."SET_ID" = "CELLS_ITEM"."SET_ID")
AND (TABLE1."META_CELL_ID" = "CELLS_ITEM"."META_CELL_ID")
)
現在、50Kレコード(およびテーブル内の約100Kレコード)を削除するには約10秒かかります
選択クエリが100K回繰り返されるため、処理速度が大幅に低下することはわかっています。
また、TABLE1には2つのフィールドPKがあり、これにより作業がより複雑になります。
それを速くするためのアイデアはありますか?
編集:
これを試しましたが、ほぼ同じです。
DELETE FROM "BMAN_TP1"."CELLS_ITEM" TABLE1
WHERE EXISTS (
SELECT "META_CELL_ID"
FROM "BMAN_TP1"."META_CELLS"
WHERE ("META_CELLS"."UDA_ID"=55823)
AND (TABLE1."META_CELL_ID" = "META_CELLS"."META_CELL_ID")
)