因此,我们准备将H2代码移植到一个noSQL存储而不是文件系统,以便我们在大型系统中使用(尽管有数万亿个较小的索引)。
当看到lucene和H2时,乍一看,如果你索引4列(比如A,B,C,D)而不是4个b树,它们看起来几乎都会使用一个b树。我有点困惑,因为那意味着,我需要查询A或者这会分解,对吗?或者我错了,实际上有4棵b树,当我加入时,这意味着我需要处理8棵b树或其他东西。
有没有关于它如何详细工作的好文章?或者有人可以推荐一些关于这个主题的好书吗?
(我在学校是一名电气工程师,所以从来没有那个数据库编程课:(有点后悔,但不应该太难以赶上)。
感谢, 迪安
答案 0 :(得分:3)
我知道的所有SQL DBMS每个复合索引只有一个B-Tree。我猜测任何其他具有“复合索引”概念的系统都表现相同。
如果{A,B,C,D}上有复合索引,这一个B-Tree将允许您有效地搜索 ...
......和类似的范围搜索。
有点效率:
效率低下:
换句话说,搜索索引的前沿是有效的(尽管某些DBMS,例如Oracle,可以使用“跳过扫描”进行非前沿搜索)。
另一方面,在{A},{B},{C}和{D}上具有单独的(非复合)索引将导致四个B树和一组不同的性能特征。
有关数据库索引如何工作的详细介绍,请查看Anatomy of an SQL Index。