To nemusí být pravda. Poddotazy se naprosto běžně používají - kromě MySQL, která v jejich implementaci pokulhává. Problém je s korelovanými poddotazy, které generují větší zátěž než je na první pohled patrné. Interně většina RDBMS dokáže převést na JOIN, což se v některých případech i blokuje a vynucuje se materializace poddotazu.
Pane Stěhule tato implikace je trošku zavádející. Chcete říct, že na MySQL se poddotazy nepoužívaji? Myslím, že ne, takže prosím příště nejdřív přemýšlejte, než něco vypustíte, ať z toho není kachna.
S MySQL to není tak úplně pravda, i tam mohou poddotazy dost ušetřit práci. Například na vybrání 1000 záznamů od určitého ID (kde ID mohou být vynechána) nic lepšího pro MySQL není :) Zkusit SELECT * FROM zaznamy WHERE id > $start LIMIT 1000; je na tabulce s několika miliony záznamů s variabilní délkou pomalá a bolestivá vražda databáze, zatímco SELECT * FROM zaznamy WHERE id > $start AND id < (SELECT max(id) FROM (SELECT id FROM zaznamy WHERE id > $start LIMIT 1000) AS data ); doběhne poměrně rychle (id je samozřejmě primární klíč).
Ale máte pravdu, že spousta věcí se v MySQL chová dost zvláštně, takže je vždy výhodnější použít EXPLAIN, než se něco začne používat, jinak se může blbě odhadnout, jak se to bude chovat (třeba u uvedeného příkladu mě ten dost razantní rozdíl v rychlosti nenapadl, ale díky EXPLAIN se to objevilo).
ten dotaz je dobrá šílenost - ale pokud není jiné cesty .. (tímhle se obchází bug v planneru). Nikde jsem nenapsal, že poddotazy v MySQL jsou nepoužitelné. Psal jsem, že i vývojáři v MySQL je nedoporučují, preferují JOINy, a intenzivně pracují na vylepšení.
Nesouhlasím s tím, že by dotaz SELECT * FROM zaznamy WHERE id > $start ORDER BY id LIMIT 1000 mohl MySQL při existenci indexu nad sloupcem id způsobit jakékoliv problémy.
Můžete dát někam vzorek dat nebo alespoň výsledek EXPLAIN?
Myslím si, že je dobré znát minimálně obě možnosti. Jestliže za člověkem někdo přijde, že chce pár informací hodit do Excelu a je to jednorázová akce, nemá smysl se psát s procedurami/funkce, jestliže ale chceme něco systematicky, souhlasím s tím, že procedury/funkce jsou vhodnější a asi i čitelnější pro případné opravy.