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')) 展开
(c.state = 'submit' and
(c.verfiedby = 'liuqi' )) or
c.state in
('verfied','pass')) 展开
展开全部
(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);
通常情况下, 用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);
展开全部
分别查询,通过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')
)
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')
)
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以使用 case when xxx then yyy else zzz end
这个比较快速
这个比较快速
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
分别写几个查询语句,然后用union all把几个查询联起来。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询