Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Mailing Lists -> Oracle-L -> RE: Function-Based Index not working
See the table's size is very small. Till it atleast 2 times the value of
DB_BLOCK_SIZE * DB_FILE_MULTIBLOCK_READ_COUNT it will not use index.
Set the value of DB_FILE_MULTIBLOCK_READ_COUNT to one.
Insert lots of values in the table. You can make a procedure to insert random characters into the table, and then put it in a big loop. Analyze table and thn run the same query.
It should work
naveen
-----Original Message-----
Sent: Saturday, August 31, 2002 4:03 PM
To: Multiple recipients of list ORACLE-L
Thanks a lot Naveen,
Even after executing the following the execution plan shows full table scan :-
+ alter session set QUERY_REWRITE_ENABLED=TRUE;
+ alter session set QUERY_REWRITE_INTEGRITY=TRUSTED;
+ alter session set optimizer_mode=FIRST_ROWS;
+ Insert into employees values('A');
+ Insert into employees values('B');
+ analyze table employees compute statistics;
+
select last_name
FROM employees WHERE UPPER(last_name) IS NOT NULL
ORDER BY UPPER(last_name); 2 3
Elapsed: 00:00:00.00
Execution Plan
0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=3 Card=2 Bytes=2 ) 1 0 SORT (ORDER BY) (Cost=3 Card=2 Bytes=2) 2 1 TABLE ACCESS (FULL) OF 'EMPLOYEES' (Cost=1 Card=2 Bytes= 2)
Even after using the hint no change in the plan :-
+ select /* INDEX employees(upper_ix) */ last_name FROM employees WHERE
UPPER(last_name) IS NOT NULL;
Please tell me what else should I do to make this query use the index which is created.
TIA,
Marul.
Marul,
The decision of going for a full tablescan is based on DB_BLOCK_SIZE * DB_FILE_MULTI_BLOCK_READCOUNT, which tells how much data Oracle fetches at one time. If your entire table can be fetched in atleast 2 fetches, full table scan will be done instead of INDEX scan, to avoid doubling of work.
Naveen
-----Original Message-----
Sent: Saturday, August 31, 2002 2:18 PM
To: Multiple recipients of list ORACLE-L
Hi,
Can you please help me out in solving this weird problem of funcation-based index not being used when I query the table. This is the comand I fired and the result it returned me.
Made the autotrace on and than:-
3. SELECT last_name FROM employees WHERE UPPER(last_name) IS NOT NULL ORDER BY UPPER(last_name);
no rows selected.
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (ORDER BY)
2 1 TABLE ACCESS (FULL) OF 'EMPLOYEES'
I fired without order by clause also but no use.
Now can any body please let tell me why this Oracle is having a full scan of the employee table.
TIA,
Marul.
-- Please see the official ORACLE-L FAQ: http://www.orafaq.com -- Author: Naveen Nahata INET: naveen_nahata_at_mindtree.com Fat City Network Services -- (858) 538-5051 FAX: (858) 538-5051 San Diego, California -- Public Internet access / Mailing Lists -------------------------------------------------------------------- To REMOVE yourself from this mailing list, send an E-Mail message to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB ORACLE-L (or the name of mailing list you want to be removed from). You may also send the HELP command for other information (like subscribing).Received on Sat Aug 31 2002 - 06:28:19 CDT
![]() |
![]() |