开发者社区> 问答> 正文

SQL语句里使用OR关键字会使索引失效吗

看到OSChina上的两篇文章《OSChina 用户动态设计说明》和《OSChina 的留言表设计说明》中都提到,如果在SQL语句的查询条件中使用OR的话,会消除SQL优化的效果,索引在这里也会失去作用。

不明觉厉,求高手指点。

展开
收起
a123456678 2016-06-29 13:34:39 3210 0
1 条回答
写回答
取消 提交回答
  • 大多数SQL数据库的索引都是B+Tree之类的数据结构,这个结构是“有序”的,比如一个integer字段上的索引会按照这个字段的值进行排序,这种索引的优点在于可以支持range query,比如where f>100这样的条件可以充分有效的利用索引。
    但是这种结构也会带来一个问题——不同的两个字段的索引的顺序并不相同,比如where f1>100 or f2<50这样的条件,你只能顺序扫描f1和f2的索引,这时你无法同时用两个索引判断一条记录是否满足条件,所以为了做这样的过滤,只能放弃其中一个索引,甚至做全表扫描。

    2019-07-17 19:49:02
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载