我有一張表。我必須查詢一個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'要細,從性能的角度。 –
你問的是如何以編程方式生成值的列表?你想要改變什麼,爲什麼? –