Flatening velmi oceňuji jako optimalizační techniku. Chtěl bych se zeptat zda PostgreSQL umí i něco jako deflattenig. Například:
select neco
from A
join B on substring(A.a from 2 for 2) = substring(B.b from 3 for 2)
a po úpravě optimizerem by bylo vyhodnoceno jako
select neco
from ( select A.*, substring(A.a from 2 for 2) as join_key from A ) as AA
join ( select B.*, substring(B.a from 3 for 2) as join_key from B ) as BB
on AA.join_key = BB.join_key
První přístup vyprodukuje product join (nested loops), druhý by měl skončit u materializace subselectů a hash joinu. Pokud jsou tabulky A a B velké, pak druhý přístup by měl vést ke zrychlení několika řádů.
Lze nějak sbírat vícesloupcové statistiky (statistiky přes více sloupců než jeden)? V manuálu jsem to nenašel.
Předem díky za případné odpovědi.
Tomáš