2011年7月12日火曜日

インデックス

どうも、69です。

今日こそは、本分のAndroidやろうかと思いましたが
眠いので…

今日は許してください。
自分には甘いので。。。


さらっと行きます。
インデックスです。

インデックスとは大量のデータから目的のデータを素早く見つけるための仕組みです。
書籍の目次や索引みたいなものです。

このたとえはわかりやすかった!!


インデックスを使わない検索では
目的のタプルが見つかるまでテーブルのレコード全体を順次読み込んでいきます。
上のほうにあれば、すぐ見つかるけど…ねぇ。

インデックスをつかうと
インデックステーブル(あらかじめ作成しておく)を探して、目的のデータの位置情報を取得します。
ただ、件数が増えちゃうと、インデックステーブルから探し出すだけで時間食っちゃう。。。

なので、効率を上げるために「Bツリー」というデータ構造でインデックスを作成します。

Bツリーはバランスツリーといいまして、
ツリー構造で、各ノードに一定の個数のキーとポインタ(位置情報)のペアを格納します。

一番上のノードをルートノード。
一番下のノードをリーフノード。
その間のノードをブランチノード。
と言います。層が増えるとブランチノードが増えてきます。

これを見て、思ったのが、二分探索ってやつ。
真ん中の値より小さいから小さい側だけを探せばいいや。みたいな。
それを繰り返して、キーを見つけ出す。のかな?

でも、これだと順番にアクセスしようとしたら
ノードを行ったり来たりしないといけなくなってまう。。。

そこで「B+ツリー」です!

B+ツリーではキーとポインタは全てリーフノードに格納されます。
その格納されたリーフノードをシーケンスセットと言います。
リーフノードはポインタでつながれているので、
Bツリーの弱点を解決できます!

よくわかりませんが、B+ツリーってのがいいらしい!

おしまい。

0 件のコメント:

コメントを投稿