Oracleでハッシュ・インデックスを使用する必要がある場合


0

ハッシュインデックスは、URLを持つ大きなテーブルがあり、そのテーブルでクエリする必要がある場合に便利です。したがって、解決策は、挿入時にトリガーを介してハッシュされたURL値で埋められる追加の列 "url_crc32"を持つことです。 url_crc32の索引は、テキストのタイプであるURL列の索引よりもはるかに高速です。

URLでデータを照会するのはあまり一般的ではありません。より頻繁なケースは、フラグメント化されたテキストデータをクエリすることであり、ハッシュインデックスはそのような場合には役に立たない。だから、私はあなたがそのようなハッシュインデックスを使用するのは興味があります、もしそうなら、あなたはいつ使っていますか? IMHO Oracleにはネイティブのハッシュ・インデックスがないため、手動で行う必要があります。

3

"実用的"であるときはいつでも、データ行の識別子としてハッシュ値を使用します。実際にはすべての行に対して単純な識別子が必要です。実用的な候補(自然な)キーフィールドはありません例えば、行識別子が「グローバル」である必要がある場合 - 同じ行が2つの異なるデータベースで作成された場合、それらは同じものを持つ必要があります識別子)。

(そのようなことの1つの非自明な例では、Gitのであろう。所定のコミットを明確に参照するためにかなり便利である一意SHA-1ハッシュによって識別されたgitリポジトリに格納された各オブジェクトは、。)

このようなものを使用する必要がある場合は、実際にOracleでテーブルを作成して索引付けするか、function-based indexでハッシュを追加する必要があります。

あなたはプレーンなハッシュが–フルテキストインデックスは、私は信じて、このように実装されている十分ではない場合application domain indexesと非常に独自のインデックス・タイプを作成することによって、さらに行くことができます。

Oracleにはハッシュベースのものがあり、実際には高速の行取得を行うためのインデックスは必要ありません。hash clusters。理論的には、シングルブロックI/O(通常のインデックス+テーブル参照は一致できず、テーブルが実際に小さい場合を除きIOTも一致することはありません)のように少しでも対象行を取得できます。しかし、それらは非常に独特であり、最初にそれらを使用するには良いキー(1つ以上の列)が必要です。When to Use Hash Clustersドキュメントを読んでください。