On May 17, 1:28 pm, gayathri Dev <[email protected]> wrote:
> Hi All,
>
> I have a question on performance..
>
> After adding a CLOB column to the existing table, "select * from table" is
> taking a while to retrieve.
> But the cost in the Explain plan looks same.
>
> Is there a way to make the retrieve faster by adding any index on the CLOB
> column? Please suggest
>
> Thanks in advance!
> G
No, since you cannot create an index on columns or attributes whose
type is user-defined, LONG, LONG RAW, LOB, or REF. Besides when you
added the CLOB column an index was generated automatically. Simply
adding a CLOB column doesn't dramatically change the retrieval time
from what I see in this example:
SQL> create table mytest(
2 myid number,
3 myval varchar2(20),
4 mydt date);
Table created.
Elapsed: 00:00:00.00
SQL>
SQL> begin
2 for i in 1..1000 loop
3 insert into mytest
4 values(i, 'Test data '||i, sysdate + mod(i,7));
5 end loop;
6
7 commit;
8
9 end;
10 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.03
SQL>
SQL> set autotrace on timing on trimspool on
SQL>
SQL> select * From mytest;
MYID MYVAL MYDT
---------- -------------------- ---------
1 Test data 1 18-MAY-11
2 Test data 2 19-MAY-11
3 Test data 3 20-MAY-11
4 Test data 4 21-MAY-11
5 Test data 5 22-MAY-11
6 Test data 6 23-MAY-11
7 Test data 7 17-MAY-11
8 Test data 8 18-MAY-11
9 Test data 9 19-MAY-11
10 Test data 10 20-MAY-11
11 Test data 11 21-MAY-11
...
705 Test data 705 22-MAY-11
706 Test data 706 23-MAY-11
707 Test data 707 17-MAY-11
708 Test data 708 18-MAY-11
709 Test data 709 19-MAY-11
1000 rows selected.
Elapsed: 00:00:00.30
Execution Plan
----------------------------------------------------------
Plan hash value: 1692938441
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1000 | 34000 | 3 (0)|
00:00:01 |
| 1 | TABLE ACCESS FULL| MYTEST | 1000 | 34000 | 3 (0)|
00:00:01 |
----------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
Statistics
----------------------------------------------------------
68 recursive calls
0 db block gets
86 consistent gets
0 physical reads
0 redo size
35967 bytes sent via SQL*Net to client
1111 bytes received via SQL*Net from client
68 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1000 rows processed
SQL>
SQL> set autotrace off timing off
SQL>
SQL> select index_name from user_indexes;
no rows selected
SQL>
SQL> alter table mytest add myclob clob lob(myclob) store as
(tablespace users chunk 4000);
Table altered.
SQL>
SQL> select index_name, index_type from user_indexes;
INDEX_NAME INDEX_TYPE
------------------------------ ---------------------------
SYS_IL0000016854C00004$$ LOB
SQL>
SQL> update mytest set myclob = rpad(myval, 20000, '*');
1000 rows updated.
SQL>
SQL> commit;
Commit complete.
SQL>
SQL> set autotrace on timing on
SQL>
SQL> select * From mytest;
MYID MYVAL MYDT MYCLOB
---------- -------------------- ---------
--------------------------------------------------------------------------------
1 Test data 1 18-MAY-11 Test data
1*********************************************************************
2 Test data 2 19-MAY-11 Test data
2*********************************************************************
3 Test data 3 20-MAY-11 Test data
3*********************************************************************
4 Test data 4 21-MAY-11 Test data
4*********************************************************************
5 Test data 5 22-MAY-11 Test data
5*********************************************************************
6 Test data 6 23-MAY-11 Test data
6*********************************************************************
7 Test data 7 17-MAY-11 Test data
7*********************************************************************
8 Test data 8 18-MAY-11 Test data
8*********************************************************************
9 Test data 9 19-MAY-11 Test data
9*********************************************************************
10 Test data 10 20-MAY-11 Test data
10********************************************************************
11 Test data 11 21-MAY-11 Test data
11********************************************************************
...
786 Test data 786 19-MAY-11 Test data
786*******************************************************************
787 Test data 787 20-MAY-11 Test data
787*******************************************************************
789 Test data 789 22-MAY-11 Test data
789*******************************************************************
790 Test data 790 23-MAY-11 Test data
790*******************************************************************
792 Test data 792 18-MAY-11 Test data
792*******************************************************************
1000 rows selected.
Elapsed: 00:00:01.50
Execution Plan
----------------------------------------------------------
Plan hash value: 1692938441
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1000 | 1988K| 5 (0)|
00:00:01 |
| 1 | TABLE ACCESS FULL| MYTEST | 1000 | 1988K| 5 (0)|
00:00:01 |
----------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
Statistics
----------------------------------------------------------
6 recursive calls
0 db block gets
3022 consistent gets
2000 physical reads
0 redo size
643319 bytes sent via SQL*Net to client
224385 bytes received via SQL*Net from client
2002 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1000 rows processed
SQL>
SQL> set autotrace off timing off
SQL>
SQL> drop table mytest purge;
Table dropped.
SQL>
SQL> create table mytest(
2 myid number,
3 myval varchar2(20),
4 mydt date);
Table created.
SQL>
SQL> begin
2 for i in 1..1000 loop
3 insert into mytest
4 values(i, 'Test data '||i, sysdate + mod(i,7));
5 end loop;
6
7 commit;
8
9 end;
10 /
PL/SQL procedure successfully completed.
SQL>
SQL> select index_name, index_type from user_indexes;
no rows selected
SQL>
SQL> alter table mytest add myclob clob;
Table altered.
SQL>
SQL> select index_name from user_indexes;
INDEX_NAME
------------------------------
SYS_IL0000016857C00004$$
SQL>
SQL> update mytest set myclob = rpad(myval, 20000, '*');
1000 rows updated.
SQL>
SQL> commit;
Commit complete.
SQL>
SQL> set autotrace on timing on
SQL>
SQL> select * From mytest;
MYID MYVAL MYDT MYCLOB
---------- -------------------- ---------
--------------------------------------------------------------------------------
1 Test data 1 18-MAY-11 Test data
1*********************************************************************
2 Test data 2 19-MAY-11 Test data
2*********************************************************************
3 Test data 3 20-MAY-11 Test data
3*********************************************************************
4 Test data 4 21-MAY-11 Test data
4*********************************************************************
5 Test data 5 22-MAY-11 Test data
5*********************************************************************
6 Test data 6 23-MAY-11 Test data
6*********************************************************************
7 Test data 7 17-MAY-11 Test data
7*********************************************************************
8 Test data 8 18-MAY-11 Test data
8*********************************************************************
9 Test data 9 19-MAY-11 Test data
9*********************************************************************
10 Test data 10 20-MAY-11 Test data
10********************************************************************
11 Test data 11 21-MAY-11 Test data
11********************************************************************
...
786 Test data 786 19-MAY-11 Test data
786*******************************************************************
787 Test data 787 20-MAY-11 Test data
787*******************************************************************
789 Test data 789 22-MAY-11 Test data
789*******************************************************************
790 Test data 790 23-MAY-11 Test data
790*******************************************************************
792 Test data 792 18-MAY-11 Test data
792*******************************************************************
1000 rows selected.
Elapsed: 00:00:01.55
Execution Plan
----------------------------------------------------------
Plan hash value: 1692938441
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1000 | 1988K| 5 (0)|
00:00:01 |
| 1 | TABLE ACCESS FULL| MYTEST | 1000 | 1988K| 5 (0)|
00:00:01 |
----------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
Statistics
----------------------------------------------------------
49 recursive calls
0 db block gets
3026 consistent gets
2000 physical reads
0 redo size
643319 bytes sent via SQL*Net to client
224385 bytes received via SQL*Net from client
2002 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1000 rows processed
SQL>
Show us an autotrace report for your query and maybe we can see where
the problem lies.
David Fitzjarrell
--
You received this message because you are subscribed to the Google
Groups "Oracle PL/SQL" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/Oracle-PLSQL?hl=en