このempid
テーブルのemployee
列にインデックスを作成すると、正確にはどうなりますか
CREATE TABLE employee
(
empid number(5),
ename varchar2(30),
sal number(10,2)
);
テーブルに以下のデータが含まれているとしましょう
empid ename sal
1 hema 10000
3 suma 10000
2 bheema 15000
4 bhama 20000
5 panama 25000
正確に私の疑いは何が作成され、インデックスに内部的に保存されるかです....パフォーマンスを改善するために、empidのソートされたコンテンツまたは行に関連する他のいくつかの情報に関係なく...?
インデックス、そのさまざまなタイプ、および内部構造については、 documentation で説明しています。
http://use-the-index-luke.com/sql/anatomy の「SQLインデックスの分析」セクションで、答えを見つける必要があります。
Indices can be implemented using a variety of data structures. Popular indices include balanced trees, B+ trees and hashes.
ほとんどの場合、バランスの取れたツリーが作成され、選択クエリのパフォーマンスが向上します。ツリー内の各ノードには、テーブルデータにすばやくアクセスするためのインデックス列とROWIDが含まれます。
CREATE INDEX I01 ON EMPLOYEE ( EMPID )
を実行するとします。
テーブルの内容は変更されません。インデックスを作成すると、ビューUSER_INDEXES
、user_tab_columns,
user_objects
などに表示される構造が登録されます。また、セグメントはデフォルトのテーブルスペースに作成されます(簡略化のため、テーブルにデータがない場合や、セグメントの作成が設定されています)、user_segments
とuser_extents
に表示されます。内部セグメントには、empid値とROWIDを含むツリー構造の格納された表現が格納されます。 ROWIDはテーブル行へのポインタとして理解できます。ツリーはブランチノードとリーフノードで構成されます。リーフノードのみに値が含まれ、ブランチノードはリーフノードを検索する役割を果たします。
デフォルトでは、順序は昇順です。
私はかつてインデックスに頭を抱えてそれらがどのように機能するかを理解する必要があり、記事を見つけました "Understanding Indexes" byrleishman非常に便利で直感的です。この著者による その他の素晴らしい投稿 もあります。