RE: index hint returns wrong results

  • From: "Terrian, Thomas J CTR (US)" <Tom.Terrian.ctr@xxxxxxx>
  • To: Jonathan Lewis <jonathan@xxxxxxxxxxxxxxxxxx>, "oracle-l@xxxxxxxxxxxxx" <oracle-l@xxxxxxxxxxxxx>
  • Date: Tue, 8 Mar 2016 13:50:50 +0000

That is interesting.

Even when I use the partition name, I still get bad results:

select /*+ index(t1 ind1) */ count(*)
from scott.t1 partition (sys_p14)
where f1 = 'one' and f2 = ' ';

  COUNT(*)
----------
         2

There is only 1 row in that table where f1 = 'one' and f2 = ' '.

And I see partition pruning in the explain plan when it tries to access the 
table (not for the global index of course).


-----Original Message-----
From: Jonathan Lewis [mailto:jonathan@xxxxxxxxxxxxxxxxxx] ;
Sent: Tuesday, March 08, 2016 8:05 AM
To: Terrian, Thomas J CTR (US); oracle-l@xxxxxxxxxxxxx
Subject: [Non-DoD Source] RE: index hint returns wrong results


If the table is partitioned then I think it's possible for the error to appear 
as a result of procedural error on the part of the application.  

I'd have to check but I think you might be able to do an exchange partition 
including indexes without validation that got data into the wrong partition 
which wouldn't be seen by a (partition eliminating) tablescan but was seen by a 
range scan of a global index.

This may be version dependent, of course thanks to enhancements in global index 
usage.



Regards
Jonathan Lewis
http://jonathanlewis.wordpress.com
@jloracle

________________________________________
From: oracle-l-bounce@xxxxxxxxxxxxx [oracle-l-bounce@xxxxxxxxxxxxx] on behalf 
of Terrian, Thomas J CTR (US) [Tom.Terrian.ctr@xxxxxxx]
Sent: 08 March 2016 12:32
To: oracle-l@xxxxxxxxxxxxx
Subject: index hint returns wrong results

Oracle 12c.

Am I missing something or is this a bug?  Using an index hint returns the wrong 
results.  Does it matter if the table is partitioned and the index is global or 
even what fields are in the index?  I can't see how any of that should matter.  
The results should be the same:


select /*+ index(t1 ind1) */ count(*)
from scott.t1
where f1 = 'one' and f2 = ' ';

  COUNT(*)
----------
         2

select count(*)
from scott.t1
where f1 = 'one' and f2 = ' ';

  COUNT(*)
----------
         1


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




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


Other related posts: