0
SELECT T1.DESCRIPTION,
   T1.NAME,
   T1.EXTERNALKEY,
   T2.STATECODE
  FROM TABLE1 T1, TABLE2 T2, TABLE3 T3
WHERE     T1.CLASSID = 7040
   AND T2.ID = T3.ID
   AND T2.RECEIVERID = T1.ID
   AND T1.OWNERID = (SELECT ID
                      FROM TABLE1
                     WHERE EXTERNALKEY = 'XXX')
MINUS
SELECT T1.DESCRIPTION,
   T1.NAME,
   T1.EXTERNALKEY,
   T2.STATECODE
FROM TABLE3 T3, TABLE1 T1, TABLE2 T2
WHERE VALUE = 'XXXX' AND T3.ID = T1.ID;

やあ。これは私の実行クエリで、非常に時間がかかります。誰でもこれを最適化されたものに変更できますか。ありがとう

4

3 に答える 3

1

まず、テーブルに適切なインデックスを配置します。理想的にはインデックスをカバーします

于 2012-08-30T10:43:54.147 に答える
0

確かに私たちは実行計画なしではあなたを助けることはできませんが、私が見るものはあなたが得るものです

SELECT ID
FROM TABLE1
WHERE EXTERNALKEY = 'XXX'

WITH句を使用して実体化するか、IDをid%typeのplsql変数に取得して、ステートメントの代わりにクエリで使用することをお勧めします。

于 2012-08-30T12:34:10.913 に答える
0
ALTER TABLE `TABLE1 ` ADD INDEX `index1` (`NAME`, `EXTERNALKEY`);  

ALTER TABLE `TABLE1 ` ADD INDEX `index2` (`OWNERID`);

ALTER TABLE `TABLE2 ` ADD INDEX `index3` (`STATECODE`);

ALTER TABLE `TABLE2 ` ADD INDEX `index4` (`RECEIVERID`);

ここで、クエリの実行時間をメモします

于 2012-08-30T11:14:05.710 に答える