看到OSChina上的两篇文章《OSChina用户动态设计说明》和《OSChina的留言表设计说明》中都提到,如果在SQL语句的查询条件中使用OR的话,会消除SQL优化的效果,索引在这里也会失去作用。不明觉厉,求高手指点。
2 回答
波斯汪
TA贡献1811条经验 获得超4个赞
大多数SQL数据库的索引都是B+Tree之类的数据结构,这个结构是“有序”的,比如一个integer字段上的索引会按照这个字段的值进行排序,这种索引的优点在于可以支持rangequery,比如wheref>100这样的条件可以充分有效的利用索引。但是这种结构也会带来一个问题——不同的两个字段的索引的顺序并不相同,比如wheref1>100orf2<50这样的条件,你只能顺序扫描f1和f2的索引,这时你无法同时用两个索引判断一条记录是否满足条件,所以为了做这样的过滤,只能放弃其中一个索引,甚至做全表扫描。
添加回答
举报
0/150
提交
取消