UNION betyder UNION DISTINCT, og dette er relativt langsomt, da det vil tjekke for dubletter, selvom der ikke vil være nogen. Du vil have UNION ALLE:
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
Jeg kan forestille mig, at der efter denne ændring ikke er meget forskel i ydeevne mellem de tre forespørgsler. Den bedste måde at være sikker på er at måle det.