M.J*_*.J. 1 oracle performance plsql
我面临一个问题。我有一个疑问
Select * from tabA
where (a) in (a,b,c)
OR b in (a,b,c)
Run Code Online (Sandbox Code Playgroud)
我想由于此查询而面临性能问题,因为我需要删除 or 条件,所以我尝试使用以下查询:
Select * from tabA
where (a,b) in (a,b,c)
Run Code Online (Sandbox Code Playgroud)
但这个查询似乎不起作用,请帮忙。我不想使用“或”条件。
如果您逻辑上需要 OR 条件,那么这就是您所需要的。使用 OR 没有任何问题。如果两列都被索引,那么查询所花的时间可能不会超过独立运行这两个查询的时间:
select * from tabA
where a in (a,b,c);
select * from tabA
where b in (a,b,c);
Run Code Online (Sandbox Code Playgroud)
优化器很可能会这样做并将结果连接起来,如下所示:
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=2 Bytes=256)
1 0 CONCATENATION
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'TABA' (Cost=2 Card=1 Bytes=128)
3 2 INDEX (RANGE SCAN) OF 'TABA_A_IDX' (NON-UNIQUE) (Cost=1 Card=1)
4 1 TABLE ACCESS (BY INDEX ROWID) OF 'TABA' (Cost=2 Card=1 Bytes=128)
5 4 INDEX (UNIQUE SCAN) OF 'TABA_B_IDX' (NON-UNIQUE) (Cost=1 Card=1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2920 次 |
| 最近记录: |