我有一张表。我必须查询一个SQL如:oracle sql替换“in”以提前查询
select * from user1 where user1.id in(1,11,111)
“1,11,111”是从会话中已知的值。
现在我想替换in
来提高性能,但exists
不能这样做。
如果你知道该怎么做,请告诉我知道。谢谢!
我有一张表。我必须查询一个SQL如:oracle sql替换“in”以提前查询
select * from user1 where user1.id in(1,11,111)
“1,11,111”是从会话中已知的值。
现在我想替换in
来提高性能,但exists
不能这样做。
如果你知道该怎么做,请告诉我知道。谢谢!
您可以使用OR
SELECT *
FROM user1
WHERE user1.id = 1
OR user1.id = 11
OR user1.id = 111
我觉得IN
运营商仅仅是罚款和不正是它是为。 优化器将内部变换查询到OR
条件。为简单起见,解析代码较少,IN将缩短查询时间,并且易于编写而不是多个OR语句。
的解释计划将清楚地表明,应用的滤波器被变换成多个OR为IN子句。
例如,
SQL> EXPLAIN PLAN FOR SELECT * FROM emp WHERE deptno IN(10,20,30);
Explained.
SQL>
SQL> SELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 13 | 481 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| EMP | 13 | 481 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------
1 - filter("DEPTNO"=10 OR "DEPTNO"=20 OR "DEPTNO"=30)
13 rows selected.
所以,你可以看到,WHERE deptno IN(10,20,30)
通过优化解释为"DEPTNO"=10 OR "DEPTNO"=20 OR "DEPTNO"=30
的'in'要细,从性能的角度。 –
你问的是如何以编程方式生成值的列表?你想要改变什么,为什么? –