看到OSChina上的两篇文章《OSChina 用户动态设计说明》和《OSChina 的留言表设计说明》中都提到,如果在SQL语句的查询条件中使用OR的话,会消除SQL优化的效果,索引在这里也会失去作用。
不明觉厉,求高手指点。
大多数SQL数据库的索引都是B+Tree之类的数据结构,这个结构是“有序”的,比如一个integer字段上的索引会按照这个字段的值进行排序,这种索引的优点在于可以支持range query,比如where f>100这样的条件可以充分有效的利用索引。
但是这种结构也会带来一个问题——不同的两个字段的索引的顺序并不相同,比如where f1>100 or f2<50这样的条件,你只能顺序扫描f1和f2的索引,这时你无法同时用两个索引判断一条记录是否满足条件,所以为了做这样的过滤,只能放弃其中一个索引,甚至做全表扫描。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。