Není pochyb o tom, že verze 1 – samostatná, kde jsou klauzule na každé straně unie – bude rychlejší. Podívejme se, proč je verze – kde klauzule nad výsledkem unie – horší:
- objem dat:ve výsledku sjednocení bude vždy více řádků, protože existuje méně podmínek pro to, jaké řádky se vrátí. To znamená více diskových I/O (v závislosti na indexech), více dočasného úložiště pro uložení sady řádků, což znamená delší dobu zpracování
- opakované skenování:celý výsledek sjednocení musí být znovu prohledán, aby se uplatnila podmínka, kdy mohl být zpracován během počátečního skenování. To znamená dvojitou manipulaci se sadou řádků, i když pravděpodobně v paměti, přesto je to práce navíc.
- indexy se nepoužívají pro klauzule where ve výsledku sjednocení. Pokud máte index přes pole cizího klíče a postType, nebude použit
Pokud chcete maximální výkon, použijte UNION ALL
, který předává řádky přímo do výsledku bez režie, namísto UNION
, který odstraňuje duplikáty (obvykle řazením) a může být drahý a je zbytečný na základě vašich komentářů
Definujte tyto indexy a použijte verzi 1 pro maximální výkon:
create index t1_authorID_postType on t1(authorID, postType);
create index t1_websiteID_postType on t1(websiteID, postType);