Static SQL (SQL tĩnh)
Static SQL là các câu lệnh SQL cố định, được viết sẵn (hard-coded) trong ứng dụng. Vì cấu trúc không thay đổi, chúng có thể được phân tích, tối ưu hóa và biên dịch tại thời điểm compile (biên dịch). Không yêu cầu xử lý bảo mật đặc biệt vì không có đầu vào người dùng trực tiếp trong cấu trúc câu lệnh.
Dynamic SQL (SQL động)
Dynamic SQL là các câu lệnh SQL được xây dựng động tại runtime dựa trên đầu vào của người dùng hoặc điều kiện chương trình. Giúp phát triển ứng dụng linh hoạt, chung chung. Tuy nhiên, cần xử lý quyền hạn và bảo mật cẩn thận (ngăn chặn SQL Injection), và hiệu suất thường kém hơn do phải biên dịch tại runtime.
Bảng so sánh chi tiết
| STT | Tiêu chí | Static SQL | Dynamic SQL |
|---|---|---|---|
| 1 | Truy cập Database | Quy trình truy cập được xác định trước trong câu lệnh. | Cách thức truy cập chỉ xác định được tại runtime. |
| 2 | Hiệu suất | Nhanh hơn, hiệu quả hơn do đã tối ưu hóa sẵn. | Kém hiệu quả hơn do biên dịch tại runtime. |
| 3 | Biên dịch | Compile time (thời điểm biên dịch). | Runtime (thời điểm chạy). |
| 4 | Kế hoạch ứng dụng (Application Plan) | Phân tích, kiểm tra, tối ưu, sinh kế hoạch xảy ra tại compile time. | Các hoạt động trên xảy ra tại runtime. |
| 5 | Trường hợp sử dụng | Dữ liệu phân bố đồng đều, truy vấn cố định. | Dữ liệu phân bố không đồng đều, truy vấn thay đổi theo điều kiện. |
| 6 | Câu lệnh đặc thù | Không dùng EXECUTE IMMEDIATE, EXECUTE, PREPARE. | Sử dụng EXECUTE IMMEDIATE, EXECUTE, PREPARE. |
| 7 | Linh hoạt | Ít linh hoạt. | Rất linh hoạt. |
Tóm lại: Chọn Static SQL khi truy vấn ổn định, ưu tiên hiệu suất. Chọn Dynamic SQL khi cần linh hoạt cao, chấp nhận chi phí hiệu suất và rủi ro bảo mật.