2

そのため、大規模なシステムで使用するために、H2コードをファイルシステムではなくnoSQLストアに移植しようとしています(ただし、数兆の小さなインデックスがあります)。

LuceneとH2を見ると、一見すると、4つのbツリーではなく4つの列(たとえば、A、B、C、D)にインデックスを付けると、どちらも1つのBツリーを使用しているように見えます。私はそこで少し混乱しています。つまり、Aでクエリを実行する必要があります。そうしないと、故障しますよね?または、私が間違っていて、実際には4つのBツリーがあり、結合を行うと、8つのBツリーを処理する必要があるかどうかを意味します。

これがどのように機能するかについての良い記事はありますか?または誰かがこの主題に関するいくつかの良い本を推薦できますか?

(私は学校の電気技師だったので、そのデータベースプログラミングクラスは一度もありませんでした:(ちょっと後悔していますが、追いつくのはそれほど難しいことではありません)。

ありがとう、ディーン

4

1 に答える 1

3

私が知っているすべてのSQLDBMSには、複合インデックス全体ごとに1つのBツリーしかありません。「複合インデックス」の概念を持つ他のシステムも同じように動作すると思います。

{A、B、C、D}の複合インデックスの場合、この1つのBツリーを使用すると、効率的に...を検索できます。

  • A=..。
  • A=...およびB=..。
  • A = ... AND B = ... AND C=..。
  • A = ... AND B = ... AND C = ... AND D=..。

...および同様の範囲検索。

次の場合はある程度効率的です。

  • A=...およびC=..。
  • A=...およびD=..。
  • A = ... AND C = ... AND D=..。
  • A = ... AND B = ... AND D=..。

そして、次の場合は非効率になります。

  • B=..。
  • B=...およびC=..。
  • B=...およびD=..。
  • B = ... AND C = ... AND D=..。
  • C=..。
  • D=..。
  • 等...

言い換えると、インデックスのリーディングエッジでの検索は効率的です(ただし、Oracleなどの一部のDBMSは、リーディングエッジ以外の検索に「スキップスキャン」を使用できます)。


一方、{A}、{B}、{C}、および{D}に個別の(非複合)インデックスを設定すると、4つのBツリーと異なるパフォーマンス特性のセットになります。

データベースインデックスがどのように機能するかについての良い紹介については、SQLインデックスの構造を見てください。

于 2012-07-17T15:27:19.373 に答える