0

Oracleで関数ベースのインデックスを使用しようとするのはこれが初めてです。しかし、私はそれを実装する方法がわかりません。ネットで検索したところ、UPPER関数インデックスなどを使用したSQLなど、これに関連する簡単な例が見つかりました。ただし、関数ベースのインデックスとは何かを説明することはたくさんありましたが、複雑なSQLの場合にそれがどのように機能するかを説明するものは何も見つかりませんでした。サブセレクトを使用してSQLをフォローしていて、実際にパフォーマンスの問題があり、それを改善するために検索を行ったところ、関数ベースのインデックスと呼ばれるものがあることがわかりました。しかし、今はそれを使用する方法と、パフォーマンスをどのように改善するかがわかりません。これがSQLです。この SQL に関数ベースのインデックスを実装する方法を教えてください (可能な場合)。

INSERT INTO TABLE1( K_ID, KKID, K_SEGMENTS, COL1, COL2, COL3, COL4, COL5, COL6, COL7 , COL8,COL9, COL10) 
SELECT DISTINCT K_ID , KKID , K_SEGMENTS , COL1 , COL2 , COL3 , COL4 , COL5 , COL6 , COL7 
, COL8 , COL9 , COL10 
 FROM TABLE2 A 
 , TABLE3 P 
 WHERE P.KEY1 = A.KEY1 
 AND NOT EXISTS ( 
 SELECT 1 
  FROM TABLE1 B 
  WHERE 1=1 
  AND A.K_ID = B.K_ID 
  AND A.K_SEGMENTS = B.K_SEGMENTS)
4

1 に答える 1

0

クエリは、関数ベースのインデックスによって役立つ可能性のある "関数" (UPPER など) を使用していません。あなたのサブクエリTABLE1は と によって相関しK_IDK_SEGMENTSいるため、パフォーマンスの問題がこのサブクエリに関連していると確信した場合、これらの 2 つの列に通常のインデックス (つまり、FB インデックスではない) を追加することを検討します。

クエリのパフォーマンスを改善する必要があるだけの場合、最初に確認するのは説明計画です。

于 2012-10-10T07:34:33.473 に答える