关于查询的问题,请求大牛指教
本帖最后由 hulu2moyu 于 2013-04-07 14:57:50 编辑 一个简单的查询select * from emp where 条件,条件是empno有多个可选项,例如:12345,4568,7896等,我想要的结果就是在emp表中,empno等于12345,4568,7896的三条记录(不许用in),求指教!
[解决办法]
先说说数据量具体有多大,查询出来多少条数据,一般采用索引或者分区就可以解决,没必要把简单问题复杂化。
[解决办法]
SQL> set autotrace on explain
SQL> alter session set optimizer_mode='rule';
会话已更改。
SQL> select * from scott.emp where empno in (12345,4568,7896);
未选定行
执行计划
----------------------
-----------------------------------------------
[解决办法]
Id
[解决办法]
Operation
[解决办法]
Name
[解决办法]
-----------------------------------------------
[解决办法]
0
[解决办法]
SELECT STATEMENT
[解决办法]
[解决办法]
[解决办法]
1
[解决办法]
CONCATENATION
[解决办法]
[解决办法]
[解决办法]
2
[解决办法]
TABLE ACCESS BY INDEX ROWID
[解决办法]
EMP
[解决办法]
[解决办法]
3
[解决办法]
INDEX UNIQUE SCAN
[解决办法]
PK_EMP
[解决办法]
[解决办法]
4
[解决办法]
TABLE ACCESS BY INDEX ROWID
[解决办法]
EMP
[解决办法]
[解决办法]
5
[解决办法]
INDEX UNIQUE SCAN
[解决办法]
PK_EMP
[解决办法]
[解决办法]
6
[解决办法]
TABLE ACCESS BY INDEX ROWID
[解决办法]
EMP
[解决办法]
[解决办法]
7
[解决办法]
INDEX UNIQUE SCAN
[解决办法]
PK_EMP
[解决办法]
-----------------------------------------------
Note
-----
- 'PLAN_TABLE' is old version
- rule based optimizer used (consider using cbo)
SQL> alter session set optimizer_mode='choose';
会话已更改。
SQL> select * from scott.emp where empno in (12345,4568,7896);
未选定行
执行计划
----------------------
----------------------------------------
[解决办法]
Id
[解决办法]
Operation
[解决办法]
Name
[解决办法]
Rows
[解决办法]
Bytes
[解决办法]
Cost (%CPU)
[解决办法]
----------------------------------------
[解决办法]
0
[解决办法]
SELECT STATEMENT
[解决办法]
[解决办法]
2
[解决办法]
74
[解决办法]
1 (0)
[解决办法]
[解决办法]
1
[解决办法]
INLIST ITERATOR
[解决办法]
[解决办法]
[解决办法]
[解决办法]
[解决办法]
[解决办法]
2
[解决办法]
TABLE ACCESS BY INDEX ROWID
[解决办法]
EMP
[解决办法]
2
[解决办法]
74
[解决办法]
1 (0)
[解决办法]
[解决办法]
3
[解决办法]
INDEX UNIQUE SCAN
[解决办法]
PK_EMP
[解决办法]
2
[解决办法]
[解决办法]
1 (0)
------解决方案--------------------
----------------------------------------
SQL> alter session set optimizer_mode='all_rows';
会话已更改。
SQL> select * from scott.emp where empno in (12345,4568,7896);
未选定行
执行计划
----------------------
----------------------------------------
[解决办法]
Id
[解决办法]
Operation
[解决办法]
Name
[解决办法]
Rows
[解决办法]
Bytes
[解决办法]
Cost (%CPU)
[解决办法]
----------------------------------------
[解决办法]
0
[解决办法]
SELECT STATEMENT
[解决办法]
[解决办法]
2
[解决办法]
74
[解决办法]
1 (0)
[解决办法]
[解决办法]
1
[解决办法]
INLIST ITERATOR
[解决办法]
[解决办法]
[解决办法]
[解决办法]
[解决办法]
[解决办法]
2
[解决办法]
TABLE ACCESS BY INDEX ROWID
[解决办法]
EMP
[解决办法]
2
[解决办法]
74
[解决办法]
1 (0)
[解决办法]
[解决办法]
3
[解决办法]
INDEX UNIQUE SCAN
[解决办法]
PK_EMP
[解决办法]
2
[解决办法]
[解决办法]
1 (0)
[解决办法]
----------------------------------------
SQL> alter session set optimizer_mode='first_rows';
会话已更改。
SQL> select * from scott.emp where empno in (12345,4568,7896);
未选定行
执行计划
----------------------
----------------------------------------
[解决办法]
Id
[解决办法]
Operation
[解决办法]
Name
[解决办法]
Rows
[解决办法]
Bytes
[解决办法]
Cost (%CPU)
[解决办法]
----------------------------------------
[解决办法]
0
[解决办法]
SELECT STATEMENT
[解决办法]
[解决办法]
2
[解决办法]
74
[解决办法]
1 (0)
------解决方案--------------------
[解决办法]
1
[解决办法]
INLIST ITERATOR
[解决办法]
[解决办法]
[解决办法]
[解决办法]
[解决办法]
[解决办法]
2
[解决办法]
TABLE ACCESS BY INDEX ROWID
[解决办法]
EMP
[解决办法]
2
[解决办法]
74
[解决办法]
1 (0)
[解决办法]
[解决办法]
3
[解决办法]
INDEX UNIQUE SCAN
[解决办法]
PK_EMP
[解决办法]
2
[解决办法]
[解决办法]
1 (0)
[解决办法]
----------------------------------------
SQL>
SQL>
SQL>
