2011-12-15 13 views
2

私は、varcharカラムをインデックスすることの意味を理解しようとしています。列の長さが150文字の場合、インデックスはどのように格納されますか?たとえば、int列をインデックスするときにbtreeがどのように使用されるのか理解していますが、varcharは複数の文字です。インデックスは基本的にchar [1]、char [2]などの複合インデックスです。varcharインデックスはどのように格納されていますか?

例を簡単にするために、値AAA、AAB、ABB、ABCなどがある場合、インデックス構造はどのように見えますか?

+0

質問を投稿した方がよい場合があります。http://dba.stackexchange.com/ – peter

答えて

4

あなたのvarchar(150)の列の値は、文字列(文字の配列ではない)としてアルファベット順(使用する照合によって定義)でソートされます。だから基本的には、ソートされた文字列の長いリストが1つあります。

このリストは、バランスの取れたbtree形式で並べられます。インデックスの各レベルは別のレベルを指しており、インデックスエントリの値は、各下位レベルのインデックスページに含まれる値の範囲を定義します。

このような構成では、わずかなページ読み込みでSQL Serverがインデックスのリーフレベルに達し、データを取得できるようになります。だから、実際には、文字列は原子文字列として解釈されます。

基本的に、インデックスの構造はSQL Server Index Basicsのように多く見えます。数値の代わりにインデックスページに文字列値があります。