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

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ホットトピック



