You are on page 1of 5

USING FUNCTIONS

################################################################

11:24:50 SAIRAM>>set autotrace on

11:24:55 SAIRAM>>create index emp_hire on emp(hire_date);

Index created.

Elapsed: 00:04:31.70

11:29:44 SAIRAM>>conn / as sysdba

Connected.

11:33:23 SYS>>

11:33:23 SYS>>

11:33:24 SYS>>alter system flush buffer_cache;

System altered.

Elapsed: 00:00:00.13

11:33:32 SYS>>alter system flush shared_pool;

System altered.

Elapsed: 00:00:00.04

11:35:22 SAIRAM>>set autotrace on

11:35:35 SAIRAM>> select count(*)

2 from emp

3* where trunc(hire_date)='20-AUG-97'

11:35:44 SAIRAM>>/

COUNT(*)

----------

1048576

Elapsed: 00:02:06.93
Execution Plan

----------------------------------------------------------

Plan hash value: 2083865914

----------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

----------------------------------------------------------------

| 0 | SELECT STATEMENT | | 1 | 8 | 157K (3)| 00:31:25 |

| 1 | SORT AGGREGATE | | 1 | 8 | | |

|* 2 | TABLE ACCESS FULL|EMP|560K| 4382K| 157K (3)| 00:31:25|

---------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

2 - filter(TRUNC(INTERNAL_FUNCTION("HIRE_DATE"))='20-AUG-97')

Statistics

----------------------------------------------------------

0 recursive calls

0 db block gets

568247 consistent gets

567981 physical reads

0 redo size

425 bytes sent via SQL*Net to client

415 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)
1 rows processed

11:37:54 SAIRAM>>conn / as sysdba

Connected.

11:39:03 SYS>>alter system flush buffer_cache;

System altered.

Elapsed: 00:00:00.37

11:39:11 SYS>>alter system flush shared_pool;

System altered.

Elapsed: 00:00:00.01

11:39:24 SYS>>conn sairam/sairam

Connected.

11:46:40 SAIRAM>>set autotrace on

11:46:44 SAIRAM>>select count(*)

11:46:48 2 from emp

11:46:51 3 where hire_date>='20-AUG-97'

11:47:12 4 and hire_date<(to_date('20-AUG-97')+0.99999);

COUNT(*)

----------

1048576

Elapsed: 00:00:01.96

Execution Plan

----------------------------------------------------------

Plan hash value: 3123538212

----------------------------------------------------------------|
Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

----------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 8 | 1558 (1)| 00:00:19
|

| 1 | SORT AGGREGATE | | 1 | 8 | | |

|* 2 | FILTER | | | | | |

|* 3 | INDEX RANGE SCAN| EMP_HIRE | 584K| 4565K| 1558


(1)| 00:00:19 |

----------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

2 - filter('20-AUG-97'<TO_DATE('20-AUG-97')+0.99999)

3 - access("HIRE_DATE">='20-AUG-97' AND

"HIRE_DATE"<TO_DATE('20-AUG-97')+0.99999)

Statistics

----------------------------------------------------------

310 recursive calls

0 db block gets

2826 consistent gets

2806 physical reads

0 redo size

425 bytes sent via SQL*Net to client

415 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

6 sorts (memory)

0 sorts (disk)

1 rows processed

11:48:07 SAIRAM>>
OBSERVATION : TIME ELAPSED FOR SELECT STATEMENT.

FULL TABLE SCAN TO BE PERFORMED, EVEN IF THERE IS AN INDEX : 00:02:06.93

(BUT FULL TABLE SCAN)

ALLOWING FOR AN INDEX : 00:00:01.96

TIP : UNLESS USING FUNCTION-BASED INDEXES, USING FUNCTIONS ON INDEXED


COLUMNS IN THE WHERE CLAUSE OF A SQL STATEMENT CAUSES THE OPTIMIZER
TO BYPASS INDEXES.

You might also like