UNION znamená UNION DISTINCT a to je relativně pomalé, protože zkontroluje duplikáty, i když žádné nebudou. Chcete UNION ALL:
SELECT *, 0 AS head FROM foo WHERE id IN (1,2,3)
UNION ALL
SELECT *, 1 AS head FROM foo WHERE id NOT IN (1,2,3)
ORDER BY head, created_date
Představoval bych si, že po této změně není mezi těmito třemi dotazy velký rozdíl ve výkonu. Nejlepší způsob, jak mít jistotu, je změřit to.