Joins considered harmful

📎and tagged

…aneb Smrt zákeřným ~vlnovkám!

Když jsem bylo ještě malé graveřátko, programující v Basicu, četlo jsem pojednání Edsgera Dijkstry Gotoes Considered Harmful o škodlivosti větvení programů pomocí přímých skoků (jakože v prehistorickém Basicu nic jiného nebylo). Od těch dob programátorské techniky poněkud pokročily (ne vždy správným směrem, jak bude vidno dál). Soudruzi z Walldorfu vykoumali syntaktickou optimalizaci příkazu SELECT v ABAP pomocí inner joins. A to neměli dělat…

Jak ubohé oběti této šílené konstrukce vědí, jedná se o syntaktické propojení vnořených selectů do tabulek se vzájemnými vazbami. Proč píšu syntaktické? Protože s faktickým propojením to nemá nic společného. Ano, milí spolutrpící – zápis inner joinu nemá nic společného s joinem nativního SQL příkazu SELECT (což je jinak vcelku efektivní konstrukce). Jak je tomu doopravdy, bude odhaleno dále (číst pouze na vlastní nebezpečí!).

Rozumný člověk s pravidelnou stolicí, chodící denně na čerstvý vzduch, má ovšem pochybnosti i o tom syntaktickém zjednodušení. Jak může takový docela nevinný inner join taky vypadat? Koukněte:

select * from bsad as cleared inner join bkpf as header
      on header~bukrs = cleared~bukrs
     and header~belnr = cleared~belnr
     and header~gjahr = cleared~gjahr
     and header~stblg = space
     appending corresponding fields of table it_open
     for all entries in it_customer
   where cleared~kunnr eq it_customer-kunnr
     and cleared~bukrs eq it_customer-bukrs
     and cleared~budat le s_period-high
     and cleared~umskz eq space
     and cleared~augdt gt s_period-high
     and cleared~hkont in s_akont.

Ještě dýcháte? Slabší povahy po shlédnutí této konstrukce stráví zbytek života v klecovém lůžku. Já jsem tuhle rouhavou ropuší odpornost musel dekódovat (samozřejmě nejsem takový blb, abych to dělal za střízliva) – dva dny jsem nespal vůbec a další týden jsem se hrůzou odkopával.

Militantní abapeři tvrdí, že joiny jsou rychlejší, než nested selects. Ti méně militantní tvrdí, že aspoň snižují network traffic. Dokládají to různými obskurními benchmarky a zaklínají se oficiálními prohlášeními walldorfských božstev. Z kruhů podzemních bratrstev zasvěcenců se mi ovšem dostalo potvrzení podezření, které jsem měl už dávno. Ano, mí soutrpící, pravda je strašlivá a ne každý ji unese, takže si lokněte Kapitána Morgana a vězte: ABAP procesor překládá joiny na vnořené selecty! Buch! Takže jakpak to asi bude s tou rychlostí?

Aby toho nebylo málo, konverze na vnořené selecty při více než 2 tabulkách není optimální (to už by chtělo lidský faktor), takže výsledkem je naprostá degradace výkonu.

A aby toho bylo ještě víc, mám takový neodbytný pocit, že SAP optimizer si s výslednou konstrukcí nějak neumí poradit, protože zatímco vnořené selecty měly při opakovaném spuštění lepší performanci, joiny vždycky stejnou.

Takže jak pravím: kdo používá inner joiny, toho budou čerti v pekle píchat vidličkami do pleše. Chystám se oslovit svého poslance s návrhem na odstranění toho prokletého znaku ~ z klávesnic, výmaz ze všech znakových sad a prohlášení jeho použití za amorální trestný čin.

 

Kontrolní otázka: víte vůbec, kde na klávesnici to svinstvo máte? Použili jste to někdy? Umyli jste si potom ruce? Nezavrhli vás za to vaši nejbližší?


13 Responses to Joins considered harmful

  1. V každém případě bych měl napsat článek např. o milostných vztazích atomů cesia, aby měl idiol vhodné téma k dalšímu rozvoji svých všech dvouch tezí – VK je zloděj a graver vůl.Koukám, že ten velbloudí trus na burnusu beduínově je rozlezlej po celým netu jako ta plíseň z Kingova horroru…

  2. to ti docela závidím Gravere, já se s tím nepárám ];-)

  3. [9]To je pěkné, že mi navrhujete předčasný důchod. Dobrý začátek – teď se ještě dohodněte, kdo to bude cálovat :-).Jen pro upřesnění – už dávno nejsem programátor – zblbl jsem z něčeho jiného. Programuju už jen pro zábavu (nerovná se zadarmo :-))Ad DDT: není cílem tyhle týpky vyhubit, ale nechat je odkopat. Každý má právo ukázat ostatním, jaký je blb (já to například dělám pořád a s chutí). Podívej se na název mého blogu :-). Idola (stejně jako x jiných před i po něm) si tu prostě povodím na špagátku jako medvědář a on na to ještě bude pyšný.

  4. Už jsme to probrali na Čertovihttp://lucifer.bloguje.cz…i-3.phpa jediné, co k tomu (idolovi) mohu dodat, je, že na to je jediné DDT ];-)

    • Avatar karolos
      karolos says:

      Čertíku- You & here ?
      The close Encounter of thierd Kind !
      It’s a dream for me.
      Iznt trů…
      Najifko, wejkap.
      Jéh, ajem gójin …
      Pic

  5. [6] – v kobylkách jsou proteiny a jak pravili staříček Pagáč, po všeckém hovno enem po včelách med.[7] – Opovaž se na tu klávesu sáhnout! Upadne ti prst a narostou chlupy na hrudníku!

  6. Avatar Vivien
    Vivien says:

    nalezenoale neumím to napsat! Chválabohu!

  7. Tak ja se teda asi odstehuju do divociny a budu se zivit kobylkama a medem lesnich vcel.

  8. [4]Nikoliv. Počítače se chovají náladově až chaoticky nezávisle na popsaném jevu (který je navíc specifický pouze pro jeden konkrétní ERP systém). Jen jim za daných okolností to podivínství trvá déle.Důvodem je málo známy fakt, že i počítač může být úplný magor. Počítače dokonce mají své psychology a psychiatry. Bohužel jsou to taky počítače a taky magoři (stejně, jako u lidí).Jediný rozdíl je v tom, že u počítačů je chaos zcela normální.A nyní mne prosím omluvte – jdu se rebootovat.

  9. Clanku sice rozumim asi tak dobre jako mexickemu fotbalovemu komentatorovi (t.j. semo tamo na me vyskoci zname slovo), ale chtela bych se zeptat: je autorem popsany jev jednim z duvodu, proc se pocitace chovaji tak naladove az chaoticky?

  10. Avatar idol
    idol says:

    to GraverPředvádíš psychicky narušeného, nebo takový opravdu jseš?

  11. U sta velryb, zase ten ichtyl.Padej k mamině, masturbante. Vyjadřuješ se jako kokot a ještě ti to baby žerou. Vrať se na poslední štaci – bylo ti tam zle pod sukní? Tohle není místo, kde stačí neříkat ošklivá slovíčka, aby tě někdo bral jako rovnocenného partnera do diskuse. Když neumíš posoudit názory, tak drž fekál – tady nejsi u kimmy.Kdybych napsal článek o sexuálním životě USB rozbočovačů, tak se do toho tenhle obsah kuchyňské výlevky nasere taky.Já ti zřídím speciální celu – tam si můžeš mastit lano, aniž bys obtěžoval dospělé.

  12. Avatar idol
    idol says:

    SouvislostiNeumím posoudit autorovy názory jako programátora, protože programování nerozumím. Pouze mne zaráží jeho zjevné zalíbení v koproláliích a podobných často až nechutnostech, kterými své myšlenky sděluje. Domnívám se, že pokleslý způsob vyjadřování signifikuje i tomu odpovídající úroveň ducha. Mýlím se?