SQL Execution Order (Thứ tự thực thi SQL)

Thứ tự thực thi SQL KHÔNG giống thứ tự bạn viết. Database thực thi theo:

FROM / JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

Vì sao quan trọng cho indexing

Thứ tự này ảnh hưởng trực tiếp đến cách xây dựng index:

  • Cột WHERE phải nằm trước cột ORDER BY trong index (WHERE chạy trước)
  • Cột GROUP BY phải nằm trước cột SELECT aggregate
  • Ví dụ: WHERE onboarding='yes' GROUP BY is_paying, gender → index (onboarding, is_paying, gender)
SELECT * FROM issues
WHERE type = 'bug'                        -- chạy trước → cột đầu index
ORDER BY severity DESC, created_at DESC;  -- chạy sau  → cột sau index
-- ✅ Index: (type, severity DESC, created_at DESC)

Lưu ý về LIMIT

ORDER BY ... LIMIT 10 không tự động nhanh: database vẫn phải sort toàn bộ matching rows trước rồi mới lấy top 10. Index mới là thứ giúp tránh sort hoàn toàn (scan 10 entries đầu từ index rồi dừng).

Liên quan