• ベストアンサー

インデックスのアルゴリズムとBツリー

主キーじゃないカラムにインデックスを張るとき、 つまり、値が重複することがありうる場合に 利用されるBツリーは通常のBツリーと比較して、 どのように変更すればよいものでしょうか。 また、WHERE句内で * などを使用して検索するとき、 どのようにBツリー内を検索すれば効率的でしょうか。 データベースの実装に関する質問になりますが、 わかる方、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>利用されるBツリーは通常のBツリーと比較して、 >どのように変更すればよいものでしょうか。 末端においてテーブルの該当レコードのポインタを格納するのではなく、ポインタの集合が格納されている領域のポインタを格納しておく >また、WHERE句内で * などを使用して検索するとき、 >どのようにBツリー内を検索すれば効率的でしょうか。 *ってワイルドカードのことですか?DBでは普通は%ですけど。 検索方法はbetweenと一緒でしょう。 あと、先頭にワイルドカードが指定されている場合はインデックスは使用しません。 こんなの見つかりましたけど。 http://www.hi-ho.ne.jp/tsumiki/doc_1.html

参考URL:
http://www.hi-ho.ne.jp/tsumiki/doc_1.html
Harry_
質問者

お礼

回答ありがとうございます。 > ポインタの集合が格納されている領域のポインタを格納しておく ここには一般的にどういうデータ構造が使用されるのですか? リンクリストでしょうか。 > *ってワイルドカードのことですか?DBでは普通は%ですけど。 ワイルドカードです。バカなことを書いてしまいました。 between 指定したときの検索については 参考URLが非常に役に立ちました。 リーフ同士をリンクさせるのですね。。。 疑問点は大体消えました。 どうもありがとうございます。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>ここには一般的にどういうデータ構造が使用されるのですか? >リンクリストでしょうか。 すべての重複項目をリンクリストで作るよりは、ある程度の領域を取ってまとめて格納し、あふれた分は別の領域へのリンクでしょうね、おそらく。

Harry_
質問者

お礼

なるほど。。 色々勉強になりました。 ありがとうございます。

関連するQ&A