2012-03-06 17 views
0

私は、インデックスアクセスの方法について読んで、オラクルにとって非常に新しいです。私は結論に達する必要があります、私はテーブルempを持っていると仮定します。インデックスアクセスの概念

table emp 
--------------------------- 
empno ename salary mgrid 
--------------------------- 
1 ab 200 2 
2 bn 900 3 
3 bh 900 1 
4 ah 890 4 
5 kk 67 0 
6 ac 9090  

、これが主キーEMPNOに一意索引が

index table(suppose) 
-------------------- 
rowid index value 
--------------------- 
xyzz  1 
-   2 
-   3 
-   4 
-   5 
-   6 

作成される方法である ' - ' 私は

クエリを記述するとし、いくつかの進値を意味し、
select * from emp where empno ='5' 

それはEMP表から

をROWIDは、インデックス値5に対応して取り出して、行が5 EMPNOに対応して取得します今、私の疑問は、ここではそれがINDEX_TABLEからフェッチされていることですが、それをのROWID見つけることはありますまた、全体のテーブル(index_table)まで5をスキャンし、同じusses rowidを見つけるために、それはどのようにインデックスのないテーブルと異なるのですか?、そこに私たちは5 empnoまでテーブル全体をスキャンしています。

インデックスのみが昇順に格納されます。

は私が間違っている知っている、誰かが説明することができ、この

**Doubt** 

は、全表スキャンをい条件をフィルタリングかかわらず、それを一人ひとり行列をスキャン? 上記のempにプライマリ・キーがない場合は、全テーブル・スキャンを行い、empno = 5の場合は、各行empno値をスキャンするかempnameをスキャンします。給料とmrgidも?

答えて

3

投稿した例ではインデックス全体をスキャンしていません。そしてそれはヒープテーブルとインデックスの違いです。

非常にのインデックスでは、インデックスを電話帳と比較できます。あなたが電話番号を検索したい場合は、電話帳を取るとジョージタウンのエントリを見つける(EMPNO = 5)ジョージタウンフランク・ミラーの(をのROWID)。町が発注されていることを知っているので、電話帳全体を読む必要はありません。だからあなたは真ん中に電話帳を開いて町がモンタナ市であることを発見する。モンタナシティはジョージタウンの後に来るので、あなたは現在のオープニングと初めの間に電話帳を開きます。あなたはジョージタウンを見つけるまでこの戦術を続ける。その後、あなたは姓と名で同じことをします。

都市、姓、名がアルファベット順に並べられているため、これも同じです。データベースでは、これはbツリーで保証されています。

おそらく、例えば on tahiti

編集、更なる情報については、Bツリー上に読みたい:データベースは、主キーが存在しない場合は、テーブル全体をスキャンしなければならない場合にも尋ねました。答えは:はい、の場合、にはempnoにインデックスがありません。

電話帳の類推では、のようなクエリで、アドレスが22 Elm Streetのすべての電話番号を見つけることができます。電話帳は通り名や家の番号で注文されていないので、それぞれの電話番号を見つけるためには各項目を読み取らなければなりません。

+0

すばらしい説明のためにレネに感謝しますが、上記の質問に記載されているもう1つの疑問をクリアすることができます、私は最近更新しました –

0

インデックステーブルの場合、プライマリキー以外にも使用できます。他の列については、データがきちんと並べられていない場合があります。たとえば、入力した例では「給与」です。

このような場合、特に数千のエントリがある場合は、インデックステーブルを使用すると便利です。

+0

1つの質問、全テーブルスキャン、特定の列の値を持つ行をスキャンするか、私たちが使用しているフィルタに関係なく、行の列の値全体をスキャンします。 empnoだけで特定の行をスキャンするか、ename、salary、mgridのようなすべての列をスキャンしますか? –

+0

:自分のコンセプトに何が間違っているか知りたいだけですか? –

+0

私は100%確実ではありませんが、フィルタリングしている値のインデックステーブルを参照すると仮定します。 – jsimpson

0

Oracle(および他のRDBMS)の「通常」インデックスは、B-tree構造体です。そして、ゴリ、もしもOracle product documentationが言及すれば!