Indexing 如何在B-树上使用暗示或查询?

Indexing 如何在B-树上使用暗示或查询?,indexing,b-tree,Indexing,B Tree,我想使用b-树作为索引,但我想不出一个解决方案或查询 对于或疑问,我的意思是 从id介于1和5之间或id介于10和15之间的表格中选择* 如果在b-树中使用id作为键,那么如何在b-树上执行上述查询 当通过b-树进行搜索时,假设小于6且大于6的密钥位于不同的子树上,而不是当搜索路径通过包含小于6的密钥的子树时,可以检索1到5之间的id,但是10到15之间的id呢 我必须使用b+树吗?当我找到指向id 1的键时,我只是一个接一个地扫描叶节点,直到找到指向id 15的键为止? 这种查询的解决方案是否

我想使用b-树作为索引,但我想不出一个解决方案或查询

对于或疑问,我的意思是 从id介于1和5之间或id介于10和15之间的表格中选择*

如果在b-树中使用id作为键,那么如何在b-树上执行上述查询

当通过b-树进行搜索时,假设小于6且大于6的密钥位于不同的子树上,而不是当搜索路径通过包含小于6的密钥的子树时,可以检索1到5之间的id,但是10到15之间的id呢

我必须使用b+树吗?当我找到指向id 1的键时,我只是一个接一个地扫描叶节点,直到找到指向id 15的键为止? 这种查询的解决方案是否不好: 从id介于1和5之间或id介于10000000和10000005之间的表中选择*

或者还有其他解决办法吗


多谢各位

OR操作意味着需要进行两次搜索,并将结果合并。

OR关键字是一个常见问题。从索引的角度来看,通常最好进行两次查找(例如,像联合查找)

然而,也存在例外情况。您的第一个示例(id介于1和5之间或id介于10和15之间)最好在从1到15的一次索引查找中完成,丢弃值6到9。但是,这取决于数据量!您的第二个示例(介于1和5之间或id介于10000000和10000005之间)看起来不是该方法的理想候选。但是,它取决于行的数量,而不是id的数量

关于和:您的示例是一个矛盾(id介于1和5之间,id介于10000000和10000005之间),查询将不会返回任何行。一些优化器能够“看到”这一点

不同列上的条件将使用串联索引解决


查看我的网络手册了解更多详细信息。

你的意思是我必须在b树上搜索两次才能得到结果吗?那么手术和手术呢?只需将查询更改为:select*from table,其中id介于1和5之间,id介于10000000和10000005之间。该查询如何?还要搜索两次吗?非常感谢你!基本上,是的,对OR和进行两次搜索。当然,正如Markus在下面建议的那样,您可以变得更加有趣,但这更多地取决于您希望使查询引擎变得多么复杂。