Oracle実行プランのアクセス述語とフィルタ述語の違いは何ですか? 私が正しく理解している場合は、どのデータブロックを読み込む必要があるかを判断するために「アクセス」が使用され、ブロックが読み込まれた後に「フィルタ」が適用されます。したがって、フィルタリングは「悪」です。下記の実行計画の述語情報セクションの例ではOracle実行プランのアクセスおよびフィルタ述語
:
10 - access("DOMAIN_CODE"='BLCOLLSTS' AND "CURRENT_VERSION_IND"='Y')
filter("CURRENT_VERSION_IND"='Y')
「CURRENT_VERSION_INDは」アクセスおよびフィルタセクションの両方で繰り返される理由は?
対応する操作は、フィールド(DOMAIN_CODE、CODE_VALUE、CURRENT_VERSION_IND、DECODE_DISPLAY)で定義されているインデックス上のINDEX RANGEスキャンです。
CURRENT_VERSION_INDは索引の2番目の列ではないため、アクセス・ステージでは使用できません。したがって、DOMAIN_CODE列で索引にアクセスし、すべてのブロックをフェッチしてから、CURRENT_VERSION_INDでフィルタリングします。私は正しい?
表内の1,2番目および3番目の列に索引が定義されている場合、WHERE句の述語が1番目および3番目の列にある場合、Oracle 10は索引を使用できますか? 2位と3位で?私は答えがノーだと思った。 さらに、実際にはアクセスとフィルタの述語の違いは何ですか? –
バージョン9i以降(スキップ・スキャン索引アクセス方式を導入して以来)、Oracleは1、2、3、またはそれらの組み合わせにアクセスするかどうかにかかわらず、索引を使用できます。 –
「アクセス」述部は、索引をスキャンするために使用される述部です。これらの述部は、索引から検索するブランチおよびリーフ・ブロックを選択するために使用され、照会のパフォーマンスにとって重要です。 "フィルタ"述部は、索引から戻された行に適用される述部です。どの行が最終的にクエリ実行計画の次のステップに送られるかを決定します。 プラン・テーブルのACCESS_PREDICATESおよびFILTER_PREDICATESのドキュメントを参照してください。http://download.oracle.com/docs/cd/E11882_01/server.112/e10821/ex_plan.htm#PFGRF94708 –