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

((c.createdby='liuqi')or(c.state='submit'and(c.verfiedby='liuqi'))orc.statein('verfie... ((c.createdby = 'liuqi' ) or
(c.state = 'submit' and
(c.verfiedby = 'liuqi' )) or
c.state in
('verfied','pass'))
展开
 我来答
dark等待
2017-10-27 · TA获得超过252个赞
知道小有建树答主
回答量:427
采纳率:87%
帮助的人:127万
展开全部
(1) 用UNION替换OR (适用于索引列)
通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果. 对_______索引列使用OR将造成全表扫描. 注重, 以上规则只针对多个索引列有效. 假如有column
没有被索引, 查询效率可能会因为你没有选择OR而降低. 在下面的例子中, LOC_ID 和REGION上都建有索引.
高效:
SELECT LOC_ID , LOC_DESC, REGION FROM LOCATION WHERE LOC_ID = 10 UNION SELECT LOC_ID , LOC_DESC ,REGION FROM LOCATION WHERE REGION = “MELBOURNE”
低效:
SELECT LOC_ID , LOC_DESC, REGION FROM LOCATION WHERE LOC_ID = 10 OR REGION = “MELBOURNE”
假如你坚持要用OR, 那就需要返回记录最少的索引列写在最前面.
(2) 用IN来替换OR
这是一条简单易记的规则,但是实际的执行效果还须检验,在ORACLE8i下,两者的执行路径似乎是相同的. 
低效: SELECT…. FROM LOCATION WHERE LOC_ID = 10 OR LOC_ID = 20OR LOC_ID = 30 高效 SELECT… FROM LOCATION WHERE LOC_IN IN (10,20,30);
good_007_2000
推荐于2017-10-27 · TA获得超过223个赞
知道答主
回答量:144
采纳率:0%
帮助的人:117万
展开全部
分别查询,通过union all合并多有结果集,类似:
select * from (
select * from XXX c where c.createdby = 'liuqi' and state in
('verfied','pass')

union all
select * from XXX c where c.state = 'submit' and c.verfiedby = 'liuqi' and state in
('verfied','pass')
)
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tianlanyijiu1
2013-10-24 · TA获得超过195个赞
知道小有建树答主
回答量:294
采纳率:100%
帮助的人:148万
展开全部
可以使用 case when xxx then yyy else zzz end
这个比较快速
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
射手幽灵伊
2013-10-17 · TA获得超过2716个赞
知道大有可为答主
回答量:4955
采纳率:81%
帮助的人:1945万
展开全部
分别写几个查询语句,然后用union all把几个查询联起来。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式