ホームページ >データベース >Oracle >Oracle はインデックスが無効かどうかをどのように判断しますか?

Oracle はインデックスが無効かどうかをどのように判断しますか?

WBOY
WBOYオリジナル
2022-05-25 15:31:156219ブラウズ

Oracle では、「select status from user_indexes whereindex_name='インデックス名';」ステートメントを使用して、インデックスが無効かどうかを判断できます。返された結果が VALID の場合は、インデックスが無効であることを意味します。無効である場合、インデックスが無効であることを意味します。

Oracle はインデックスが無効かどうかをどのように判断しますか?

このチュートリアルの動作環境: Windows 10 システム、Oracle 11g バージョン、Dell G3 コンピューター。

Oracle がインデックスが無効かどうかを判断する方法

構文は次のとおりです:

select status from user_indexes where index_name='索引名称';

戻り結果が VALID の場合、インデックスが有効であることを意味します。 !

例を図に示します。

Oracle はインデックスが無効かどうかをどのように判断しますか?

拡張知識:

インデックス障害の解決策

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。