インデックスとハッシュの主な違いは、インデックスがクエリを処理するためのディスクアクセス回数を減らすことでデータベースのパフォーマンスを最適化するのに対し、ハッシュはインデックス構造を使わずにディスク上のデータレコードの直接位置を計算することです。
データベースとは、関連するデータの集合体です。
DBMS(データベース管理システム)は、データベース内のデータを簡単に作成、管理することができる。
ユーザーはSQLクエリーを書いて、データベースのテーブルに対して操作を実行することができる。
DBMSは、複数のユーザーがデータにアクセスし、使用することを可能にする。
さらに、トランザクションを実行し、データを保護することができます。
DBMS に関連する概念として、インデックスとハッシュがあります。
インデックスとは
SQLクエリーを実行する際、ディスクからデータにアクセスするためにある程度の時間がかかります。
ここで、インデックスとは、データベースのテーブル内のデータを素早く見つけ、アクセスするのに役立つデータ構造のことである。
インデックスを作成することで、クエリを処理するためにアクセスするディスクの数を減らすことができます。
インデックスは、検索キーとデータ参照の2つのセクションから構成されています。
検索キーはテーブルの主キーまたはキー候補を含む。
データ参照には、そのキーに対応する値を持つディスクブロックのアドレスが格納される。
また、インデックスにはさまざまな種類があります。
そのうちのいくつかを紹介する。
オーダリングインデックス – インデックスがソートされているため、データ検索が高速になる
プライマリーインデックス – インデックスがテーブルの主キーに基づいている場合、それはプライマリーインデックスと呼ばれる。
プライマリーキーには、密なインデックスと予備インデックスと呼ばれる2種類のインデックスがあります。
密なインデックスには、データファイル内のすべての検索キー値に対するインデックスレコードが含まれる。
スペアインデックスでは、いくつかのデータ項目に対するインデックスレコードが存在する。
クラスタ化インデックス – 2つ以上のカラムの組み合わせでインデックスを作成する。
レコードのグループは、同じ特徴を持つレコードで構成される。
そして、これらのグループによってインデックスが作成される。
セカンダリーインデックス – マッピングのサイズを最小化するために、もう1つのレベルのインデックスを含んでいる。
ハッシュ化とは
大規模なデータベースでは、必要なデータを得るためにすべてのインデックスを検索することは不可能です。
ハッシングは、インデックスを使わずに、ディスク上の特定のデータレコードの位置を直接見つけるのに役立つ。
ここで、データブロックはデータバケットとも呼ばれ、データを格納する。
ハッシュ化関数は数学的な関数です。
そのデータブロックのアドレスを生成するのに役立つ。
なお、ハッシュ関数は任意のカラム値を選択してアドレスを生成することができるが、通常は主キーを使ってデータブロックのアドレスを生成する。
ハッシュには静的ハッシュと動的ハッシュの2種類があります。
静的ハッシングでは、結果として得られるデータのバケットアドレスは常に同じです。
しかし、静的ハッシュでは、バケットがオーバーフローしてしまう。
この問題を解決するのが、ダイナミックハッシングです。
ダイナミックハッシングでは、レコード数に応じてバケットを増減させる。
インデックスとハッシュの違い
定義
インデックスとは、データベースファイルから、インデックスを作成した属性に基 づいてレコードを効率的に検索するためのデータ構造技術です。
一方、ハッシュはインデックス構造を用いずに、データレコードのディスク上の直接の位置を計算する有効な手法です。
これがインデックス付けとハッシュ化の主な違いです。
機能性
インデックスがキーに対応する値を持つディスクブロックのアドレスを保持するデータ参照を用いるのに対し、ハッシュはハッシュ関数と呼ばれる数学的関数を用いてディスク上のデータレコードの位置を直接計算する。
したがって、この点もインデックス付けとハッシュ化の大きな違いです。
アプリケーション
インデックス作成とハッシュ化のもう一つの違いは、ハッシュ化はインデックス作成よりも大規模なデータベースでうまく機能することである。
結論
インデックスとハッシュの主な違いは、インデックスがクエリ処理のためのディスクアクセス数を減らすことでデータベースのパフォーマンスを最適化するのに対し、ハッシュはインデックス構造を使わずにディスク上のデータレコードの位置を直接計算することである。