ホームページ > データベース > Oracle > Oracle はどのようにしてインデックスを無効にするのでしょうか?

Oracle はどのようにしてインデックスを無効にするのでしょうか?

WBOY
リリース: 2022-01-26 10:25:37
オリジナル
11150 人が閲覧しました

Oracle インデックスの失敗の原因: 1. WHERE 句を使用していない; 2. "IS NULL" および "IS NOT NULL" を使用している; 3. WHERE 句で関数を使用している; 4. ファジー クエリに LIKE を使用している; 5. WHERE 句で不等号演算を使用する; 6. 一致しないデータ型を比較す​​るなど。

Oracle はどのようにしてインデックスを無効にするのでしょうか?

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

Oracle がインデックスを無効にする仕組み

Oracle インデックスの目的は、テーブル全体のスキャンを回避し、クエリの効率を向上させることですが、場合によっては逆効果になることがあります。

たとえば、テーブル内に数百万のデータがあり、特定のフィールドにインデックスを追加してもクエリのパフォーマンスが向上しない場合、これは Oracle インデックスの障害が原因である可能性があります。 Oracle インデックスにはいくつかの制限があります。これらのインデックス制限に違反すると、インデックスを追加した場合でも、Oracle は依然としてテーブル全体のスキャンを実行します。インデックスを追加しない場合と比べてクエリのパフォーマンスは向上しません。代わりに、次のような理由が考えられます。インデックスを維持するシステムのオーバーヘッドにより、パフォーマンスが低下します。以下は、Oracle インデックスの失敗の原因となる 7 つの制約の概要です。

1. WHERE 句はありません

2. IS NULL および IS NOT NULL

SELECT ... FROM emp を使用しますWHERE comm IS NULL; comm 列のインデックスは無効になります

3. WHERE 句で関数を使用します

関数ベースのインデックスが使用されていない場合は、次に where 句 インデックス付きカラムで関数を使用する場合、オプティマイザはこれらのインデックスを無視します。例:

select * from staff where trunc(birthdate) = '01-MAY-82';
ログイン後にコピー

ただし、関数を条件に適用するとインデックスが有効になるので、上記の文を次の文に変更するとインデックスを使って検索できるようになります。

select * from staff where birthdate < (to_date(&#39;01-MAY-82&#39;) + 0.9999);
ログイン後にコピー

注: Oracle は引き続き MIN、MAX 関数のインデックスを使用します。

#4. ファジー クエリには LIKE '%T' を使用します。

5. WHERE 句で不等演算を使用します

等しくない操作には次のものが含まれます: <>、!=、NOT colum >= ?、NOT colum <= ?

この制限は、OR で置き換えることができます。たとえば、colum <> 0 ===> 列>0 OR 列<0

6. 等しいインデックスと範囲インデックスは結合されません。

SELECT emp_id, emp_m, salary_q ... FROM emp WHERE job=&#39;manager&#39; AND deptno>10
ログイン後にコピー

job と deptno は両方とも非です。 Oracle はこの条件下ではインデックスをマージせず、最初のインデックスのみを使用します。

7. 比較はデータ型と一致しません

dept_id は varchar2 フィールドです。このフィールドにはインデックスがありますが、次のステートメントはテーブル全体を実行します。スキャン。

select * from dept where dept_id = 900198;
ログイン後にコピー

これは、Oracle が where 句を to_number(dept_id)=900198 に自動的に変換するためです。これは、インデックスの使用を制限する関数を使用するのと同じです。正しい書き方は次のとおりです。

select * from dept where dept_id = &#39;900198&#39;;
ログイン後にコピー
推奨チュートリアル: "

Oracle Video Tutorial"

以上がOracle はどのようにしてインデックスを無効にするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート