4

DBについて何か理解するのを手伝ってください。

一般に(=デフォルト構成では、特別な調整なし)、行/ブロックサイズが一定であることを考慮して、データベース(= oracle / mssql)は可変長文字列(= VARCHAR2)をどのように格納しますか?テーブルの行の外に、他のデータブロックへのポインタが格納されていると思います-それは正しいですか?

また、文字列インデックスはどのように機能しますか?キーの比較にアルファベット順を使用するBツリー、またはプレフィックスツリーのようなよりスマートなものですか?

ありがとう!

4

1 に答える 1

5

データベースで使用されるインデックスメカニズムは、データベースに完全に依存しています。データベースについて具体的な質問がある場合は、データベースのドキュメントを参照してください。ほとんどのインデックスはBツリーであると思いますが、それは単なる推測です。

可変長文字列の格納に関する質問もデータベースエンジン次第です。一般に、これらは長さでエンコードされるため、最初の2バイトは文字列の長さに続き、文字が続きます。ただし、SQLには、ヌルバイトエンコーディング(Cで行われるように)などの他のメカニズムを妨げるものはありません。この方法でそれらを保存するデータベースがおそらくそこにあります。

ただし、これは概算です。MSSQLの長い文字列は、レコードの固定長フィールドとは別のデータページに格納されます。長い文字列がページサイズを超えると、文字列がページに収まらなければならないため、状況ははるかに複雑になります。

テキスト検索機能をサポートするデータベースには、文字列のインデックス作成のためのまったく異なるメカニズムがあります。通常は転置インデックスです。

問題を解決するための最良の方法を探している場合は、別の質問で問題を説明する必要があります。データベースの詳細をお探しの場合は、Google、データベースドキュメント、およびWikipediaが最適です。

于 2012-08-05T15:00:04.237 に答える