Re: Preventing Nested Table Full Access

  • From: Andrew Kerber <andrew.kerber@xxxxxxxxx>
  • To: my.oralce@xxxxxxxxx
  • Date: Mon, 1 Apr 2013 10:33:43 -0500

If the object is cached and has only 1000 rows, you most likely want Oracle
to be doing a full table scan since the entire object is most likely read
in a single IO operation.  Forcing an indexed read on such a small object
will force at least two Io operations.  Consider doing some analysis of the
query and make sure that it is the read of the 1000 row table that is
taking the time and not some other part of the operation. Then, if that
really is the delay you could always add an indexed hint or something like
that.

On Mon, Apr 1, 2013 at 10:22 AM, Anupam Pandey <my.oralce@xxxxxxxxx> wrote:

> Hi ,
>        I am using a table as a cache for an oracle object type
> collection.The query to build the object collection is time consuming .So
> idea is to build the cache object once and store the elements in cache
> table and when next time its needed then return from cache table itself
> rather than going through entire process .
> But the problem is Oracle does a Full Table Scan always when I select from
> this cache table . So select time increases as number of rows in table
> increases .Following is the script for what I am using ..
>
> CREATE OR REPLACE TYPE VALUE_arr as table of varchar2(30);
>
> CREATE TABLE OBJECT_CACHE
> (
>   CACHE_ID           NUMBER,
>   DARRAY          VALUE_ARR,
>   MARRAY       VALUE_ARR,
>   FARRAY   VALUE_ARR,
>   AARRAY       VALUE_ARR,
>   SARRAY   VALUE_ARR,
>   QUERY  CLOB,
>   CONSTRAINT key_pk
>        PRIMARY KEY(cache_id)
> )
> NESTED TABLE DARRAY STORE AS DARRAY_TBL ,
> NESTED TABLE MARRAY STORE AS MARRAY_tbl ,
> NESTED TABLE FARRAY STORE AS FARRAY_TBL ,
> NESTED TABLE AARRAY STORE AS AARRAY_TBL ,
> NESTED TABLE SARRAY STORE AS SARRAY_TBL ;
>
> Select query which I am using is following ..
>
> select query
> from OBJECT_CACHE
> where darray = value_arr(   'a','b','c','d')
> and marray =value_Arr('a','b')
> and farray = value_arr('a','b');
>
>
> As of now this table has 1000 rows and select statement is taking nearly 11
> secs for fetching the query .
>
> Is there a way to avoid the FTS or is there any other way to work out this
> solution ?
>
>
> Thanks,
> Anupam
>
>
> --
> //www.freelists.org/webpage/oracle-l
>
>
>


-- 
Andrew W. Kerber

'If at first you dont succeed, dont take up skydiving.'


--
//www.freelists.org/webpage/oracle-l


Other related posts: