oracle sql 用什么可以替代or,这样查询特别慢

((c.createdby = 'liuqi' ) or
(c.state = 'submit' and
(c.verfiedby = 'liuqi' )) or
c.state in
('verfied','pass','passtwo'))

可以用union,比如select 内容 from user where name='张三' union select 内容 from user where name='李四',相当于select 内容 from user where name='张三' or name='李四' ,因为union会用到索引,不知道你这个表有没有索引,表的数据多大?追问

没有建索引,不知道该把哪个字段建立索引,表的数据挺大,有几千条数据吧,后面还会一直加,如果采用您的union方式,那么sql语句会特别长。

追答

你好,索引一般应该加在你的条件字段上,你的可以在createdby,state 和verfiedby上,建完索引还要分析一下,如果表的数据才几千条应该很快,后面一直加,能有多大?会上百万以上或者上千万?sql语句会特别长的问题,看你表中字段有多少了?其实不知道你的表结构情况和你有没有和别的表有关连查询了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-17
唯一的优化方案就是,把越能命中的or语句放到最前面,增加前面减少后面的or 逻辑判断
第2个回答  2013-10-18
用case when 替换,应该会快点,而且安全
第3个回答  推荐于2017-09-25
用 union all
select * from tableA
where c1='A'
union all
select * from tableA
where c1='B'
相似回答