sql >> Database teknologi >  >> RDS >> Oracle

Mærkelig adfærd med fuld ydre sammenføjning i Oracle - hvordan kunne det forklares?

Optimizeren bør ikke vælge at bruge indekset på EMP.DEPT_ID i den anden forespørgsel, da det kan have NULL-værdier. Det er det, der får den til at ekskludere én række fra resultaterne.

Den eneste forklaring uden fejl, jeg kan komme i tanke om i øjeblikket, er, at du på en eller anden måde har oprettet begrænsninger i DISABLE RELY-tilstand, så optimizeren mener, at feltet ikke kan indeholde NULL. I dette tilfælde ville det være korrekt at bruge indekset givet de forkerte oplysninger i begrænsningerne. Det ser dog ud til, at RELY-indstillingen ikke er tilgængelig for NOT NULL-begrænsninger, så jeg kan ikke se, hvordan dette kan være problemet. Ikke desto mindre, tag et omhyggeligt kig på alle begrænsninger på bordene.

Bortset fra det, er der et overraskende antal fejl på Oracles websted vedrørende forkerte resultater fra fulde ydre joinforbindelser. Du rammer måske en af ​​dem. I en hel del af disse tilfælde er løsningen at deaktivere "native" fulde outer joins, hvilket du kan gøre for din nuværende session med denne erklæring:

alter session set "_optimizer_native_full_outer_join"=off; 


  1. mysqli/mysql-forespørgsel inde i funktionen virker ikke

  2. PHP-script til backup af MySQL-database

  3. Forespørgsel for at finde en liste over *alle* SSRS-datasæt på tværs af *alle* SSRS-rapporter på ReportServer-instansen

  4. sp_send_dbmail alternativ i postgres? Nem måde at sende Postgres e-mail-rapporter på?