如何在B树上使用暗示OR查询?

我想使用b-tree作为索引,但我想不出OR查询的解决方案。 对于OR查询,我的意思是 从表中选择*,其中id介于1和5之间,或者id介于10和15之间; 如果我使用id作为b树中的键,那么如何在b-tree上进行如上所述的查询? 当通过b树搜索时,假设小于6且大于6的密钥位于不同的子树上,而不是当搜索路径经过包含小于6的密钥的子树时,id在1到5之间可以重新获得,但是在10到15之间的id呢? 我是否必须使用b +树,当我找到指向id 1的密钥时,我只是逐个扫描叶节点,直到找到指向id 15的密钥? 这种查询是不好的解决方案: 从表中选择*,其中id介于1和5之间或者id介于10000000和10000005之间??? 或者还有其他解决方案吗? 非常感谢你!     
已邀请:
OR操作意味着需要进行两次搜索,并将结果组合在一起。     
OR关键字是一个常见问题。从索引的角度来看,通常最好进行两次查找(例如,像UNION)。 但是,存在例外情况。您的第一个示例(介于1和5之间的ID或介于10和15之间的ID)可能最好在1到15的索引查找中完成,丢弃值6-9。但是,这取决于数据量!您的第二个示例(介于1和5之间的OR ID在10000000和10000005之间)看起来不适合该方法。但是,它取决于行数,而不取决于id的数量。 关于AND:您的示例是一个矛盾(1和5之间的ID AND 10000和10000005之间的ID),查询将不返回任何行。一些优化者能够“看到”那个。 使用连接索引来解决不同列上的AND条件。 看看我的网络书使用索引,卢克!了解更多详情。     

要回复问题请先登录注册