从H2数据库移植索引逻辑和连接逻辑,但有关索引的任何好信息?

时间:2012-07-17 12:17:20

标签: database-design h2

因此,我们准备将H2代码移植到一个noSQL存储而不是文件系统,以便我们在大型系统中使用(尽管有数万亿个较小的索引)。

当看到lucene和H2时,乍一看,如果你索引4列(比如A,B,C,D)而不是4个b树,它们看起来几乎都会使用一个b树。我有点困惑,因为那意味着,我需要查询A或者这会分解,对吗?或者我错了,实际上有4棵b树,当我加入时,这意味着我需要处理8棵b树或其他东西。

有没有关于它如何详细工作的好文章?或者有人可以推荐一些关于这个主题的好书吗?

(我在学校是一名电气工程师,所以从来没有那个数据库编程课:(有点后悔,但不应该太难以赶上)。

感谢, 迪安

1 个答案:

答案 0 :(得分:3)

我知道的所有SQL DBMS每个复合索引只有一个B-Tree。我猜测任何其他具有“复合索引”概念的系统都表现相同。

如果{A,B,C,D}上有复合索引,这一个B-Tree将允许您有效地搜索 ...

  • A = ...
  • A = ... AND B = ...
  • A = ... AND B = ... AND C = ...
  • A = ... AND B = ... AND C = ... AND D = ...

......和类似的范围搜索。

有点效率:

  • A = ... AND C = ...
  • A = ... AND D = ...
  • A = ... AND C = ... AND D = ...
  • A = ... AND B = ... AND D = ...

效率低下

  • B = ...
  • B = ... AND C = ...
  • B = ... AND D = ...
  • B = ... AND C = ... AND D = ...
  • C = ...
  • D = ...
  • 等...

换句话说,搜索索引的前沿是有效的(尽管某些DBMS,例如Oracle,可以使用“跳过扫描”进行非前沿搜索)。


另一方面,在{A},{B},{C}和{D}上具有单独的(非复合)索引将导致四个B树和一组不同的性能特征。

有关数据库索引如何工作的详细介绍,请查看Anatomy of an SQL Index