目次
Oracle には複数のインデックスがあります
ホームページ データベース Oracle Oracleにはいくつかのインデックスがあります

Oracleにはいくつかのインデックスがあります

Jun 10, 2022 pm 05:39 PM
oracle

Oracle には 6 種類のインデックスがあります: 1. 「B*」番号インデックス、キーに基づいて行または行セットへの高速アクセスを提供します; 2. ビットマップ インデックス、これは適切です反復性が高く、通常は読み取り専用のデータの場合、3. 関数ベースのインデックス (関数計算の結果を行の列に格納します)、4. アプリケーション ドメイン インデックス (自分で構築して格納するインデックス)、5. HASH インデックス、このインデックスを使用するには HASH クラスターを使用する必要があります ; 6. パーティション化インデックス、インデックスを複数のフラグメントに分割します。

Oracleにはいくつかのインデックスがあります

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

Oracle には複数のインデックスがあります

Oracle は、使用できるさまざまなタイプのインデックスを提供します。簡単に言えば、Oracle には次のインデックスが含まれています:

1、B* ツリー インデックス

これらは、私が「従来の」インデックスと呼んでいるものです。これは、Oracle およびその他のほとんどのデータベースで最も一般的に使用されるインデックスです。

B* ツリーの構造はバイナリ ツリーに似ており、キーに基づいて 1 つの行または一連の行に高速にアクセスできます。通常、正しい行を見つけるために必要な読み取り操作は数回だけです。 。ただし、「B*ツリー」の「B」はバイナリを表すのではなく、バランス(平衡)を表すことに注意することが重要です。 B* ツリーを物理的にディスクに保存する方法を紹介するときにわかるように、B* ツリー インデックスはバイナリ ツリーではありません。 B* ツリー索引には次のサブタイプがあります。

索引構成表 (索引構成表): 索引構成表は B* ツリー構造に保管されます。データ行が整理されていない方法で格納されるヒープ テーブルとは異なり (空き領域がある限りデータを配置できます)、IOT 内のデータは主キーの順序で格納および並べ替えられます。アプリケーションにとって、IOT は「通常の」テーブルのように動作します。IOT に正しくアクセスするには SQL が必要です。 IOT は、情報取得、空間システム、OLAP アプリケーションに最も役立ちます。 IoT については、前の章で詳しく説明しました。

B*tree クラスター インデックス (B*tree クラスター インデックス) これらは、従来の B*tree インデックスの変形です (わずかな変更のみ)。 B* ツリー クラスター化インデックスは、クラスター化キーのインデックス付けに使用されるため (第 11 章の「クラスター化テーブルのインデックス付け」セクションを参照)、この章では説明しません。従来の B* ツリーでは、キーは 1 つの行を指しますが、B* ツリー クラスタリングとは異なり、クラスタリング キーは、このクラスタリング キーに関連する複数の行を含むブロックを指します。

降順インデックス: 降順インデックスを使用すると、インデックス構造内でデータを「小さいものから大きいものへ」の順序 (昇順) ではなく、「大きいものから小さいものへ」の順序 (降順) で並べ替えることができます。降順インデックスが重要である理由と、降順インデックスがどのように機能するかを説明します。

リバース キー インデックス: これも B* ツリー インデックスですが、キー内のバイトが「反転」される点が異なります。逆キー インデックスを使用すると、インデックスに値が増加する場合、インデックス エントリをインデックス内でより均等に分散できます。たとえば、シーケンスを使用して主キーを生成する場合、シーケンスは 987500、987501、987502 などの値を生成します。値は連続しているため、従来の B* ツリー インデックスが使用されている場合、これらの値は同じ右側のブロックに配置される可能性があり、このブロックの競合が増加します。 Oracle は逆キーを使用して、205789、105789、005789 などに論理的にインデックスを付けます。 Oracle は、格納されたデータをインデックスに配置する前にバイト反転するため、インデックス内で互いに隣接していた値は、バイト反転後には大きく離れます。バイトを反転すると、インデックスへの挿入が複数のブロックに分散されます。

2. ビットマップ インデックス (ビットマップ インデックス)

B* ツリーでは、通常、インデックス エントリと行の間にギャップがあります。 1 対 1 の関係: 1 つのインデックス エントリが 1 つの行を指します。ビットマップ インデックスの場合、1 つのインデックス エントリはビットマップを使用して同時に複数の行を指します。ビットマップ インデックスは、反復性が高く、通常は読み取り専用のデータに適しています (反復性が高いということは、データがテーブル内の総行数に対して個別の値が少数しかないことを意味します)。 100 万行のテーブルを考えてみましょう。各列には、Y、N、NULL の 3 つの値のみが含まれます。たとえば、値 Y を持つ行の数を頻繁にカウントする必要がある場合、これはビットマップ インデックスの構築に適しています。ただし、このテーブルの特定の列に 11,000 個の異なる値がある場合、ビットマップ インデックスを作成できないというわけではありません。もちろん、この列に対してビットマップ インデックスを作成することもできます。 OLTP データベースでは、同時実行関連の問題のため、ビットマップ インデックスは考慮できません (これについては後で説明します)。ビットマップのインデックス作成には Oracle Enterprise または Personal Edition が必要であることに注意してください。

ビットマップ結合インデックス (ビットマップ結合インデックス): これは、(テーブルではなく) インデックス構造内のデータの非正規化方法を提供します。たとえば、単純な EMP テーブルと DEPT テーブルを考えてみましょう。 「ボストンにある部門で働いている人は何人ですか?」という質問をする人がいるかもしれません。EMP には DEPT を指す外部キーがあります。ボストンの LOC 値を使用して部門の従業員の数を数えるには、通常、この質問に答えるには、EMP レコードへのテーブル結合と LOC 列結合を使用します。ビットマップ結合インデックスを使用すると、EMP テーブルの LOC 列にインデックスを付けることができます。

3. 関数ベースのインデックス (関数ベースのインデックス)

これらは B* ツリー インデックスまたはビットマップ インデックスであり、関数計算の結果は、列データそのものではなく、行の列に格納されます。関数ベースのインデックスは、仮想列 (または派生列) のインデックスと考えることができます。つまり、列はテーブルに物理的に格納されません。関数ベースのインデックスを使用すると、値 FUNCTION(DATABASE_COLUMN) が事前に計算され、インデックスに格納されているため、SELECT * FROM T W HERE FUNCTION(DATABASE_COLUMN) = SAME_VALUE のようなクエリを高速化できます。

4. アプリケーション ドメイン インデックス (アプリケーション ドメイン インデックス)

アプリケーション ドメイン インデックスは、自分で構築および保存するインデックスです。 Oracle 内、または Oracle の外部に格納されます。インデックスの選択性と実行のコストをオプティマイザーに伝える必要があります。オプティマイザーは、提供された情報に基づいてインデックスを使用するかどうかを決定します。 Oracle テキスト索引はアプリケーション・ドメイン索引の一例であり、Oracle テキスト索引の作成に使用するのと同じツールを使用して独自の索引を作成することもできます。ここで作成される「インデックス」では、従来のインデックス構造を使用する必要がないことに注意してください。たとえば、Oracle テキスト索引は、一連の表を使用して索引の概念を実装します。

5. HASH インデックス

HASH インデックスを使用するには、HASH クラスターを使用する必要があります。クラスターまたは HASH クラスターを作成するときは、クラスター キーも定義します。このキーは、Oracle にテーブルをクラスターに保存する方法を指示します。データを保存するとき、このクラスター キーに関連するすべての行がデータベース ブロックに保存されます。データが同じデータベース ブロックに格納されており、HASH インデックスが使用されている場合、Oracle は HASH 関数と I/O を実行し、バイナリ高さ 4 の B ツリー インデックスを適用することによってデータにアクセスできます。 4 データを取得するときの I/O。

ヒント: HASH インデックスは、制限がある場合 (値の範囲ではなく特定の値を指定する必要がある場合) に非常に便利です。

6. パーティション化インデックス

パーティション化インデックスは、インデックスを複数のフラグメントに分割するだけで、より小さなフラグメントにアクセスできるようになります。 (I/O の問題を避けるため) 異なるハードドライブに保存できます。 B 番号インデックスとビットマップ インデックスはどちらもパーティション化できますが、HASH インデックスはパーティション化できません。

パーティションインデックスには、ローカルパーティションインデックスとグローバルパーティションインデックスの 2 種類があります。各タイプには、プレフィックス付きとプレフィックスなしの 2 つのサブタイプがあります。ビットマップ インデックスを使用する場合、それはローカル インデックスである必要があります。

インデックスをパーティション分割する主な理由は、読み取る必要があるインデックスのサイズを削減することです。さらに、パーティションを異なる表スペースに配置すると、パーティションの可用性と信頼性が向上します。

推奨チュートリアル: 「Oracle ビデオ チュートリアル

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

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Oracleで2つの日付の間の日数を計算する関数 Oracleで2つの日付の間の日数を計算する関数 May 08, 2024 pm 07:45 PM

2 つの日付の間の日数を計算する Oracle の関数は DATEDIFF() です。具体的な使用法は次のとおりです。 時間間隔の単位を指定します: 間隔 (日、月、年など) 2 つの日付値を指定します: date1 と date2DATEDIFF(interval, date1, date2) 日数の差を返します。

Oracle データベースのログはどのくらいの期間保存されますか? Oracle データベースのログはどのくらいの期間保存されますか? May 10, 2024 am 03:27 AM

Oracle データベース ログの保存期間は、次のようなログのタイプと構成によって異なります。 REDO ログ: 「LOG_ARCHIVE_DEST」パラメータで構成された最大サイズによって決定されます。アーカイブ REDO ログ: 「DB_RECOVERY_FILE_DEST_SIZE」パラメータで構成された最大サイズによって決まります。オンライン REDO ログ: アーカイブされず、データベースの再起動時に失われます。保持期間はインスタンスの実行時間と一致します。監査ログ: 「AUDIT_TRAIL」パラメータによって構成され、デフォルトで 30 日間保持されます。

Oracle データベースの起動手順の順序は次のとおりです。 Oracle データベースの起動手順の順序は次のとおりです。 May 10, 2024 am 01:48 AM

Oracle データベースの起動シーケンスは次のとおりです。 1. 前提条件を確認します。 3. データベース インスタンスを起動します。 5. データベースに接続します。サービスを有効にします (必要な場合)。 8. 接続をテストします。

オラクルで間隔を使用する方法 オラクルで間隔を使用する方法 May 08, 2024 pm 07:54 PM

Oracle の INTERVAL データ型は、時間間隔を表すために使用されます。構文は INTERVAL <precision> <unit> です。INTERVAL の演算には、加算、減算、乗算、除算を使用できます。これは、時間データの保存などのシナリオに適しています。日付の差を計算します。

Oracle にはどれくらいのメモリが必要ですか? Oracle にはどれくらいのメモリが必要ですか? May 10, 2024 am 04:12 AM

Oracle が必要とするメモリーの量は、データベースのサイズ、アクティビティー・レベル、および必要なパフォーマンス・レベル (データ・バッファー、索引バッファーの保管、SQL ステートメントの実行、およびデータ・ディクショナリー・キャッシュの管理) によって異なります。正確な量は、データベースのサイズ、アクティビティ レベル、および必要なパフォーマンス レベルによって影響されます。ベスト プラクティスには、適切な SGA サイズの設定、SGA コンポーネントのサイズ設定、AMM の使用、メモリ使用量の監視などが含まれます。

Oracle で特定の文字の出現数を確認する方法 Oracle で特定の文字の出現数を確認する方法 May 09, 2024 pm 09:33 PM

Oracle で文字の出現数を確認するには、次の手順を実行します。 文字列の全長を取得します。 文字が出現する部分文字列の長さを取得します。 部分文字列の長さを減算して、文字の出現数をカウントします。全長から。

Oracleで文字列を置換する方法 Oracleで文字列を置換する方法 May 08, 2024 pm 07:24 PM

Oracle で文字列を置換する方法は、REPLACE 関数を使用することです。この関数の構文は、REPLACE(string, search_string, replace_string) です。使用手順: 1. 置換する部分文字列を特定します。 2. 部分文字列を置換する新しい文字列を決定します。 3. REPLACE 関数を使用して置換します。高度な使用法には、複数の置換、大文字と小文字の区別、特殊文字の置換などが含まれます。

Oracle データベース サーバーのハードウェア構成要件 Oracle データベース サーバーのハードウェア構成要件 May 10, 2024 am 04:00 AM

Oracle データベース サーバーのハードウェア構成要件: プロセッサ: マルチコア、少なくとも 2.5 GHz のメイン周波数 大規模なデータベースの場合は、32 コア以上が推奨されます。メモリ: 小規模データベースの場合は少なくとも 8 GB、中規模のデータベースの場合は 16 ~ 64 GB、大規模なデータベースまたは重いワークロードの場合は最大 512 GB 以上。ストレージ: SSD または NVMe ディスク、冗長性とパフォーマンスのための RAID アレイ。ネットワーク: 高速ネットワーク (10GbE 以上)、専用ネットワーク カード、低遅延ネットワーク。その他: 安定した電源、冗長コンポーネント、互換性のあるオペレーティング システムとソフトウェア、放熱と冷却システム。

See all articles