入力する実際のデータ、名、姓などを格納するために RDBMS で使用されるデータ構造は何か、インデックス作成などには B および B+ ツリーが効率的であることはわかっていますが、これについての適切な回答は得られていません。私の無知を許してください。
1 に答える
これは通常、ストレージ エンジン次第であり、生データはデータベース データのさまざまな分類のために保存されます。そのうち少なくとも 3 つの一般的な区分があります。
- インデックス(その値を含む行を指すキー)
- 行データ(非ブロブ データ、ここにいくつかの情報)
- BLOB データ(通常はバルク データ。通常は検索せず、他のキーで行を検索した後に一括で取得する拡張データと考えてください)
ここに記載する情報のほとんどは、MySQL の知識に基づいています。
インデックス
たとえば、MySQLには次のようないくつかの があります。
私が知る限り、InnoDB と MyISAMは B ツリー インデックスを使用しますが、メモリ ストレージ エンジンでは B ツリーまたはハッシュ インデックスを指定できます。
ドキュメントには、それぞれの使用方法を比較するページも含まれています。
他の RDBMS は独自の仕様を使用する予定ですが、B ツリーが一般的だと思います。
通常、インデックスはそれ自体の小さなテーブルのようになります。インデックス値は主キーであり、値はその値を含む行の主キーのリストです。
行データ
この答えもまた複雑で、ストレージ エンジン次第です。実装の詳細に興味がある場合は、ストレージ エンジンを参照してください。
行は、主キーによってすばやく検索できるデータ形式で格納されます。通常、行には比較的小さい (2 16バイトと考えてください) 固定制限があり、その後、さらにデータが拡張データページにプッシュされるため、速度が向上します。
主キーは常に索引付けされ、その他の値はオプションで索引付けできます。そうでない場合、ストレージ エンジンがそれらを見つける唯一の方法は「テーブル スキャン」です。文字通り、すべてのデータをループして、列の値と探している値を比較します。
ブロブデータ
BLOB データは、行の主キーによって検索できること以外に、特別なインデックス プロパティを持たない大きなファイル システムのようなものだと考えてください。また、行ごとに割り当てられる固定スペースの利点も失われます。これは、大量の任意の量のデータを格納できるというトレードオフです。