| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> Re: Does "WHERE 0=1" require a full table scan?
Interesting ...
on a test table with a unique index I get
SQL> select * from bungo where col1 < 10 and 1=0;
no rows selected
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 FILTER
2 1 INDEX (RANGE SCAN) OF 'BUNGO_IDX' (UNIQUE)
Statistics
0 recursive calls
0 db block gets
0 consistent gets
0 physical reads
0 redo size
220 bytes sent via SQL*Net to client
368 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
SQL> select * from bungo where 1=0;
no rows selected
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 FILTER
2 1 TABLE ACCESS (FULL) OF 'BUNGO'
Statistics
0 recursive calls
0 db block gets
0 consistent gets
0 physical reads
0 redo size
220 bytes sent via SQL*Net to client
368 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
SQL> select count (*) from (select * from bungo);
COUNT(*)
31850
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'BUNGO'
Statistics
0 recursive calls
0 db block gets
52 consistent gets
0 physical reads
0 redo size
381 bytes sent via SQL*Net to client
499 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
which makes me believe that there's something in the optimizer that sees it
anyway.
"Wolfram Roesler" <wr_at_grp.de> wrote in message
news:Xns94807C6718D20wrgrpde_at_130.133.1.4...
> Hi,
>
> a simple question: For a query like "SELECT * FROM table WHERE 0=1",
> does Oracle do a full table scan, or does it optimize the query away
> and return nothing without accessing the table?
>
> The background for this question is, I'm writing a C++ function that
> takes a column name and a list of strings and creates a WHERE clause
> to search for these strings, like "column IN ('string 1','string 2',...).
> In case of an empty list I want to create a WHERE clause that matches
> nothing, and I'm pondering whether "WHERE 0=1" or "WHERE column!=column"
> would be better.
>
> Thanks for your help
> Wolfram Roesler
Received on Fri Jan 30 2004 - 05:36:43 CST
![]() |
![]() |