sql >> Databasteknik >  >> RDS >> Oracle

Konstigt beteende med full yttre sammanfogning i Oracle - hur skulle det kunna förklaras?

Optimeraren bör inte välja att använda indexet på EMP.DEPT_ID i den andra frågan, eftersom det kan ha NULL-värden. Detta är vad som gör att den utesluter en rad från resultaten.

Den enda icke-buggförklaring jag kan komma på för tillfället är att du på något sätt har skapat begränsningar i DISABLE RELY-läge så att optimeraren tror att fältet inte kan innehålla NULL. I det här fallet skulle det vara korrekt att använda indexet givet den felaktiga informationen i begränsningarna. Det verkar dock som att RELY-alternativet inte är tillgängligt för NOT NULL-begränsningar, så jag ser inte hur detta kan vara problemet. Ta ändå en noggrann titt på alla begränsningar på tabellerna.

Bortsett från det finns det ett överraskande antal buggar på Oracles webbplats angående felaktiga resultat från fullständiga yttre anslutningar. Du kanske slår en av dem. I en hel del av dessa fall är lösningen att inaktivera "native" fullständiga yttre anslutningar, vilket du kan göra för din nuvarande session med detta uttalande:

alter session set "_optimizer_native_full_outer_join"=off; 


  1. Skapa primärnyckelfel på postgresql, heroku, Rails 4

  2. Hur man installerar Procedural Option i Oracle 11gr2

  3. Hur man subtraherar 30 dagar från ett datum i T-SQL

  4. Lagra datum i Hibernate som UTC-tidsdatum?