|
SQL> desc d
Name
----------------
A
B
C
SQL> select count(*) from d;
COUNT(*)
----------
10004
SQL> select table_name,index_name,column_name from user_ind_columns where table_name='D';
TABLE_NAME INDEX_NAME COLUMN_NAM
---------- ---------- ----------
D D_B B
D D_A A
SQL> analyze table d compute statistics for table for all indexes for all indexed columns;
Table analyzed.
SQL> set autotrace on
SQL> SELECT * FROM d WHERE A=10 AND (B IS NULL OR B > 100);
A B C
---------- ---------- ----------------------------------------
10 aa
10 200 aa
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=27)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'D' (Cost=2 Card=1 Bytes=
27)
2 1 INDEX (RANGE SCAN) OF 'D_A' (NON-UNIQUE) (Cost=1 Card=1)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
6 consistent gets
0 physical reads
0 redo size
509 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed
SQL> SELECT * FROM d WHERE A=10 AND NVL(B,101) > 100;
A B C
---------- ---------- ----------------------------------------
10 aa
10 200 aa
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=27)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'D' (Cost=2 Card=1 Bytes=
27)
2 1 INDEX (RANGE SCAN) OF 'D_A' (NON-UNIQUE) (Cost=1 Card=1)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
6 consistent gets
0 physical reads
0 redo size
509 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed
好像逻辑读是一样的嘛
^_^ |
|