Oracle では、「select status from user_indexes whereindex_name='インデックス名';」ステートメントを使用して、インデックスが無効かどうかを判断できます。返された結果が VALID の場合は、インデックスが無効であることを意味します。無効である場合、インデックスが無効であることを意味します。
このチュートリアルの動作環境: Windows 10 システム、Oracle 11g バージョン、Dell G3 コンピューター。
構文は次のとおりです:
select status from user_indexes where index_name='索引名称';
戻り結果が VALID の場合、インデックスが有効であることを意味します。 !
例を図に示します。
拡張知識:
インデックス障害の解決策
1. 適切な Oracle オプティマイザーの選択
Oracle オプティマイザーには 3 つのタイプがあります:
a. RULE (ルールベース) b. COST (コストベース) c. CHOOSE (選択的))。
init.ora ファイル内の OPTIMIZER_MODE パラメータ (RULE、COST、CHOOSE、ALL_ROWS、FIRST_ROWS など) のさまざまな宣言を通じてデフォルトのオプティマイザを設定します。もちろん、SQL ステートメント レベルまたはセッション レベルでオーバーライドすることもできます。
コストベースのオプティマイザー (CBO、コストベースのオプティマイザー) を使用するには、analyze コマンドを頻繁に実行して、データベース内のオブジェクト統計の精度を高める必要があります。
データベースのオプティマイザ モードが選択 (CHOOSE) に設定されている場合、実際のオプティマイザ モードは、分析コマンドが実行されたかどうかに関係します。テーブルが分析されている場合、オプティマイザ モードは自動的に CBO になります。それ以外の場合、データベースはオプティマイザの RULE 形式を使用します。
(Analyzing table
analyze table PROD_PARTS compute statistics; ANALYZE TABLE PROD_PARTS COMPUTE STATISTICS FOR ALL INDEXED COLUMNS; analyze table PROD_PARTS compute statistics for table for all indexes for all indexed columns;
) [インデックスの失敗後、DBA に相談した結果、データ統計に問題があることがわかりました。具体的な解決策は、上記のステートメントを実行することです]
デフォルトでは、Oracle は CHOOSE オプティマイザーを使用します。不必要な全テーブル スキャンを回避するには、CHOOSE オプティマイザーの使用を避け、ルール ベースまたはコスト ベースのオプティマイザーを直接使用する必要があります。
2.インデックスを再構築します
alter index 索引名 rebuild 【online】
3. インデックスを強制します
ステートメントにヒントを追加した後、「RECORD_ENTITYID」インデックスを使用するように強制します
SQL ステートメントは次のようになります。
Quote
select /*+ index(record,record_entityid) */ * from RECORD where entityId='24' and entityType='blog';
/*index(record,record_entityid) */ ここで、index はインデックスが強制的に使用されることを意味し、record はテーブル名、record_entityidインデックス名です。実行計画はテスト データベースと一致しており、どちらも「RECORD_ENTITYID」インデックスを使用しており、論理読み取りおよび書き込みも 4 です。
テスト後、ヒントを追加せずにテーブルと 2 つのインデックスを分析した後、「RECORD_ENTITYID」インデックスも使用できます。ただし、テーブルは頻繁に更新されるため、再度分析するのにどれくらい時間がかかるかわかりません。
推奨チュートリアル: "Oracle Video Tutorial"
以上がOracle はインデックスが無効かどうかをどのように判断しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。