sql >> Databáze >  >> RDS >> Oracle

Podivné chování úplného vnějšího spojení v Oracle – jak by se to dalo vysvětlit?

Optimalizátor by neměl volit použití indexu na EMP.DEPT_ID ve druhém dotazu, protože může mít hodnoty NULL. To způsobuje vyloučení jednoho řádku z výsledků.

Jediné nebugové vysvětlení, které mě v tuto chvíli napadá, je, že jste nějakým způsobem vytvořili omezení v režimu DISABLE RELY, takže si optimalizátor myslí, že pole nemůže obsahovat hodnoty NULL. V tomto případě by bylo správné použít index vzhledem k nesprávným informacím v omezeních. Zdá se však, že možnost RELY není k dispozici pro omezení NOT NULL, takže nechápu, jak by to mohl být problém. Přesto se pečlivě podívejte na všechna omezení na tabulkách.

Kromě toho je na webu Oracle překvapivé množství chyb týkajících se nesprávných výsledků z úplných vnějších spojení. Možná trefíte jednoho z nich. V několika z těchto případů je řešením deaktivace „nativních“ úplných vnějších spojení, což můžete pro svou aktuální relaci provést pomocí tohoto příkazu:

alter session set "_optimizer_native_full_outer_join"=off; 


  1. Nedefinovaná vlastnost:Illuminate\Database\Eloquent\Collection::Laravel 5.2

  2. Fluent NHibernate nemůže načíst MySql.Data z GAC v režimu ladění testu

  3. Načítání neúplného objektu pomocí mapování hibernace jako nativního dotazu

  4. Úvod do funkcí PL/SQL v databázi Oracle