postgres=# ALTER TABLE lo ALTER COLUMN x SET statistics 10; ALTER TABLE postgres=# analyze verbose lo; INFO: analyzing "public.lo" INFO: "lo": scanned 3000 of 4406 pages, containing 681000 live rows and 0 dead rows; 3000 rows in sample, 1000162 estimated total rows ANALYZE postgres=# ALTER TABLE lo ALTER COLUMN x SET statistics 100; ALTER TABLE postgres=# analyze verbose lo; INFO: analyzing "public.lo" INFO: "lo": scanned 4406 of 4406 pages, containing 1000000 live rows and 0 dead rows; 30000 rows in sample, 1000000 estimated total rows ANALYZE
#debug_print_parse = off #debug_print_rewritten = off #debug_print_plan = off #debug_pretty_print = offnikdy jsem to netestoval. Predpokladam, ze to je k tomu na co se ptate,
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áš