Rozdil v rychlosti pri pouziti (+)= nebo OUTER JOIN muze nastat, na Oracle totiz novejsi varianta zapisu neni podporovana ve starem Optimizeru, takze pri pouziti klicoveho slova JOIN se optimizer prepne z pravdiloveho (RBO) na nakladovy (CBO) a jestli nejsou prirpavene dostatecne rpesne udaje pro vypocet nakladu, tak muze byt vysledkem neoptimalni provedeni dotazu.
Ale jde vlastne jen o problem se zastaralou a jiz prilis nepodporovanou veci - pravidlovym optimizerem.
Pouze pro upřesnění: přepis z ANSI normy na Oracle propriet-format nevede na změnu optimizer mod a nemá valný vliv na cost (testováno na 10gR2). Pokud je nastaven OPTIMIZER_MODE na CHOOSE, potom k omezení na RULE vedou jen specifické kombinace SQL dotazů (našel bych seznam, jinak AskTom). Co se týče přípravy statistik, naštěstí je CBO Oracle dost chytrý a pokud nemá žádné statistiky může použít dynamic sampling (default 32 bloků dat). Pokud je DADA jako ANOANO, tak smůla, jinak ženskou, která rozumí Oracle to bych chtěl potkat (něco co se jen tak nevidí). P.S. mám dost kolegů co zatuhli na úrovni 8i :)
Pro detaily doporučuji (Oracle® Performance Tuning for 10gR2 Second Edition --Gavin Powell, pg. 168)
My jsme jednou na Oraclu (9i) narazili na to, že dotazy s vnorenymi dotazy obsahujicimi linky do jinych databazi to pri vyuziti JOINove syntaxe vyhodnocovalo velmi neefektivne (select bezel i hodiny aby pak spadla na rollback segment too small) a i hinty to ignorovalo. Mistni DBA nam poradili prevod do ,WHERE syntaxe (pri zachovani stejne logiky), coz vyrazne pomohlo a jeste se to pak dalo trochu urychlit pomoci hintu.
To je asi právě ten případ, kdy selhal planner postavený na statistikách, protože statistiky neměl k dispozici. Což je spíše ta výjimka, která potvrzuje pravidlo.
S podobným problémem jsem se také setkal. Ke katastrofě došlo, když se primární CBO (9.2.0.6) snažil kamarádit se starou RBO (8.1.7.4). Bohužel v explain plan se pro tyto případy často objevuje REMOTE (serial_from_remote), cena uvedená ale může (a taky byla) uplný nesmysl. Ještě lepší to je u heterogenního linku např. do MSSQL nebo jinam. (cena/počet řádků/množství dat - nic z toho se nedá stanovit)