9

入力する実際のデータ、名、姓などを格納するために RDBMS で使用されるデータ構造は何か、インデックス作成などには B および B+ ツリーが効率的であることはわかっていますが、これについての適切な回答は得られていません。私の無知を許してください。

4

1 に答える 1

11

これは通常、ストレージ エンジン次第であり、生データはデータベース データのさまざまな分類のために保存されます。そのうち少なくとも 3 つの一般的な区分があります。

  • インデックス(その値を含む行を指すキー)
  • 行データ(非ブロブ データ、ここにいくつかの情報)
  • BLOB データ(通常はバルク データ。通常は検索せず、他のキーで行を検索した後に一括で取得する拡張データと考えてください)

ここに記載する情報のほとんどは、MySQL の知識に基づいています。

インデックス

たとえば、MySQLには次のようないくつかの があります。

私が知る限り、InnoDB と MyISAMは B ツリー インデックスを使用しますが、メモリ ストレージ エンジンでは B ツリーまたはハッシュ インデックスを指定できます。

ドキュメントには、それぞれの使用方法を比較するページも含まれています。

他の RDBMS は独自の仕様を使用する予定ですが、B ツリーが一般的だと思います。

通常、インデックスはそれ自体の小さなテーブルのようになります。インデックス値は主キーであり、値はその値を含む行の主キーのリストです。

行データ

この答えもまた複雑で、ストレージ エンジン次第です。実装の詳細に興味がある場合は、ストレージ エンジンを参照してください。

行は、主キーによってすばやく検索できるデータ形式で格納されます。通常、行には比較的小さい (2 16バイトと考えてください) 固定制限があり、その後、さらにデータが拡張データページにプッシュされるため、速度が向上します。

主キーは常に索引付けされ、その他の値はオプションで索引付けできます。そうでない場合、ストレージ エンジンがそれらを見つける唯一の方法は「テーブル スキャン」です。文字通り、すべてのデータをループして、列の値と探している値を比較します。

ブロブデータ

BLOB データは、行の主キーによって検索できること以外に、特別なインデックス プロパティを持たない大きなファイル システムのようなものだと考えてください。また、行ごとに割り当てられる固定スペースの利点も失われます。これは、大量の任意の量のデータを格納できるというトレードオフです。

于 2013-09-29T18:39:33.593 に答える