Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: (long) index on upper case
Also, check on optimizer* parameters...
See the end of this post, it shows the CBO is quite intelligent :)
Tanel.
SQL> select * from v$version;
BANNER
SQL> select * from x;
N
SQL> create index i on x(upper(n));
Index created.
SQL> analyze table x compute statistics;
Table analyzed.
SQL> analyze index i compute statistics;
Index analyzed.
SQL> show parameter query
NAME TYPE VALUE
------------------------------------ ------- ------------------------------
query_rewrite_enabled boolean TRUE query_rewrite_integrity string TRUSTED
SQL> show parameter cost_adj
NAME TYPE VALUE
------------------------------------ ------- ------------------------------
optimizer_index_cost_adj integer 100
SQL> set autotrace on explain;
SQL> select n from x where upper(n)='TANEL';
N
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=2 Bytes=12) 1 0 TABLE ACCESS (FULL) OF 'X' (Cost=1 Card=2 Bytes=12)
SQL> alter session set optimizer_index_cost_adj=50;
Session altered.
SQL> select n from x where upper(n)='TANEL';
N
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=2 Bytes=12) 1 0 TABLE ACCESS (BY INDEX ROWID) OF 'X' (Cost=1 Card=2 Bytes=
12)
2 1 INDEX (RANGE SCAN) OF 'I' (NON-UNIQUE) (Cost=1 Card=2)
SQL> SQL> select upper(n) from x where upper(n)='TANEL';
UPPER(N)
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=2 Bytes=12) 1 0 INDEX (RANGE SCAN) OF 'I' (NON-UNIQUE) (Cost=1 Card=2 Byte
s=12)
SQL> alter session set optimizer_index_cost_adj=100;
Session altered.
SQL> select upper(n) from x where upper(n)='TANEL';
UPPER(N)
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=2 Bytes=12) 1 0 INDEX (RANGE SCAN) OF 'I' (NON-UNIQUE) (Cost=1 Card=2 Byte
s=12)
SQL> Received on Mon Mar 03 2003 - 09:27:26 CST