UNION nghĩa là UNION DISTINCT và điều này tương đối chậm vì nó sẽ kiểm tra các bản sao mặc dù sẽ không có bất kỳ. Bạn muốn ĐOÀN KẾT TẤT CẢ:
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
Tôi sẽ tưởng tượng rằng sau thay đổi này, không có nhiều sự khác biệt về hiệu suất giữa ba truy vấn. Cách tốt nhất để chắc chắn là đo lường nó.