Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> Re: Checking if more than 0 rows exist.
Are you sure?
Take a look at the sample:
Test table is 20k rows, one row for 1-9999, and id=10000 has 10000
rows.
index on the id column.
--BAD Performance:
SQL> select count(*) from test where id=10000 and rownum=1;
COUNT(*)
1
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=1 Bytes=3) 1 0 SORT (AGGREGATE)
2 1 COUNT (STOPKEY) 3 2 INDEX (FAST FULL SCAN) OF 'IDX_A' (NON-UNIQUE) (Cost=5 Card=10133 Bytes=30399)
Statistics
0 recursive calls 0 db block gets 26 consistent gets 0 physical reads 0 redo size 379 bytes sent via SQL*Net to client 503 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
COUNT(*)
1
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1) 1 0 SORT (AGGREGATE)
2 1 FILTER 3 2 INDEX (FULL SCAN) OF 'SYS_IOT_TOP_7102' (UNIQUE) (Cost =1 Card=1) 4 2 INDEX (RANGE SCAN) OF 'IDX_A' (NON-UNIQUE) (Cost=1 Car d=1 Bytes=3)
Statistics
0 recursive calls 0 db block gets 3 consistent gets 0 physical reads 0 redo size 379 bytes sent via SQL*Net to client 503 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
1
1
Execution Plan
0 SELECT STATEMENT Optimizer=HINT: FIRST_ROWS (Cost=21 Card=1 Bytes=3) 1 0 COUNT (STOPKEY) 2 1 INDEX (RANGE SCAN) OF 'IDX_A' (NON-UNIQUE) (Cost=21 Card =10133 Bytes=30399)
Statistics
0 recursive calls 0 db block gets 2 consistent gets 0 physical reads 0 redo size 372 bytes sent via SQL*Net to client 503 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processedReceived on Tue May 10 2005 - 19:01:33 CDT
![]() |
![]() |