Refactoring My Intelligence

技術的/非技術的な雑記,備忘録等々

DBにおける主索引(Primary index)と二次索引(Secondary index)の違い

DBの本を読んでいて,主索引と二次索引という用語について最近までちゃんと理解できていなかった.今の解釈が本当に正しいかは確証は無いが,多分こういうことだろうといえる程度には納得したので,備忘録として書いておく

 

主索引

テーブルのレコードは実際にディスクに何らかの形で格納されるが,その時に単純なヒープファイルを使うことはほとんど無く,大体は検索効率を考慮して索引を持つファイル編成がとられるはず(例えばB-tree,ハッシュファイル等).で,このように実際のデータを格納するために用いたファイル編成時の索引(キー)が主索引である.

 ※例えば,テーブルを作成するときに主キーを指定し,その主キーを索引キーとしてBtree構造のファイル編成を採用した場合,主索引(のキー)はその主キーとなる.

二次索引

SQL等を通じてDBに問い合わせる時,上記の主索引キー以外のキーを検索に用いること*1も普通にあるが,そのようなキーで作成した索引が二次索引となる.二次索引も索引というデータを持つのでファイルとしてディスクに保存されるのであるが,二次索引のデータファイルには実際のレコード(の実体)は持たない(主索引のデータファイルで持っているので二重で持つことになり無駄).その代わりに主索引で作成したデータファイル中のレコードへのポインタを持つ.しかも二次索引のキーでは,レコードを一意に識別できないこともある*2ので,レコードへのポインタは複数持つことが多い.

*1:WHERE句で主キー以外の列(or 列の組み合わせ)で色々な条件を付けること

*2:WHERE句で指定された列(or 列の組み合わせ)が一意制約を持つとは限らない