このクエリがあり、適切なインデックスを追加してパフォーマンスを向上させたいと考えています。
DELETE FROM MYTAB1 WHERE MYID1 IN (SELECT MYID2 FROM MYTAB2);
インデックスの構文と、インデックスに必要な設定のタイプに精通していません。同じものを提供してください。ここでの主な問題は、MYTAB1には数百万のレコードがあるため、クエリに多くの時間がかかることです。ただし、MYTAB2には1000レコードしかありません。MYID1はMYTAB1の主キーです
インデックスを作成してみました:
CREATE INDEX IDX_TAB1_ID1 ON MYTAB1(MYID1);
クエリのパフォーマンスにはあまり影響しませんでした。
Explain Planを実行して、これを取得しました。
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)|
------------------------------------------------------------------------------------
| 0 | DELETE STATEMENT | | 63977 | 11M| | 62216 (2)|
| 1 | DELETE | MYTAB1 | | | | |
| 2 | HASH JOIN RIGHT SEMI| | 63977 | 11M| 7688K| 62216 (2)|
| 3 | TABLE ACCESS FULL | MYTAB2 | 437K| 2561K| | 1189 (2)|
| 4 | TABLE ACCESS FULL | MYTAB1 | 3761K| 678M| | 24718 (4)|
------------------------------------------------------------------------------------