実行に時間がかかるクエリがあります。私は約10分待っていますが、まだ実行が完了していません。INNER JOINを使用したクエリの高速化
SELECT
one.ID,
two.NAME,
two.STATUS,
four.KEY,
four.VALUE,
count(one.ID) as num
FROM TABLE_ONE one, TABLE_TWO two, TABLE_THREE three, TABLE_FOUR four
WHERE one.STATE='RED'
AND (two.STATUS='ON' OR two.STATUS='OFF')
AND (
four.KEY='FINAL'
OR four.KEY='LIMIT'
OR (
four.KEY='MODE'
AND (
four.VALUE='T'
OR four.VALUE='R')))
GROUP BY one.ID, two.NAME, two.STATUS, four.KEY, four.VALUE
ORDER BY group_name ASC;
私は同等ですが、非常に速い(実行するために約1秒)を実行する別のクエリを持っている:
クエリは次のようになります。ここで
は、そのクエリです:
SELECT
one.ID,
two.NAME,
two.STATUS,
four.KEY,
four.VALUE,
count(one.ID) as num
FROM TABLE_ONE one
INNER JOIN TABLE_TWO two
ON one.ID=two.ID
INNER JOIN TABLE_THREE three
ON two.ID=three.GROUP_ID
INNER JOIN TABLE_FOUR four
ON three.ID=four.ID
WHERE one.STATE='RED'
AND (two.STATUS='ON' OR two.STATUS='OFF')
AND (
four.KEY='FINAL'
OR four.KEY='LIMIT'
OR (
four.KEY='MODE'
AND (
four.VALUE='T'
OR four.VALUE='R')))
GROUP BY one.ID, two.NAME, two.STATUS, four.KEY, four.VALUE
ORDER BY group_name ASC;
(10minsについて待っていたとはまだありませんINNER JOIN
とクエリは本当に速く実行なぜ私は一種の混乱している(約1秒)とないものに時間がかかります実行される)。
実行時間を短縮するためにINNER JOIN
がないクエリに何かできますか?
私はORACLEを使用しています。
実行計画(または "計画の説明")を見てください。私の推測では、「内部結合」バージョンはパフォーマンスを向上させるためにインデックスを使用していますが、結合条件がフィルタ条件と混在しているバージョンは何らかの理由でインデックスを使用していません。あるいは、実行計画を見るときに明白でなければならないいくつかの違いがあります。 – SlimsGhost