Bài viết được sự cho phép của tác giả Kiên Nguyễn
Static SQL là gì?. Dynamic SQL là gì?. Nguồn gốc ra đời thật là một câu chuyện dài.
Anh em chúng ta ngày xưa xem phim chưởng Hongkong tất nhiên không thể không biết tới Trương Vô Kị, Tạ Tốn và BIG DICK môn phái. Ý nhầm (BIG SIX môn phái).
Ngày ấy, lúc Triệu Mẫn thách đấu Trương Tam Phong, trong lúc nguy khốn, Vô Kỵ được sư ông chỉ dạy cho một bộ quyền pháp có tên “Thái cực quyền”. Bộ võ học tuyệt tác này có đoạn viết:
Thái cực quyền trọng kì nghĩa, bất trọng kì chiêu.
Lấy TĨNH CHẾ ĐỘNG, lấy âm chế dương, lấy vô chiêu thắng hữu chiêu.
Tại sao tôi lại nhắc về thái cực quyền, vì bản thân cái Dynamic đã có nghĩa là động. Dynamic SQL là SQL động. Nhưng để hiểu được động thì tất nhiên phải biết một chút tới tĩnh.
Đm, thằng quỷ viết bài này!. Nói té đi là Dynamic, dẫn chuyện dài dòng. Bày đặt Thái Cực Quyền các kiểu, bố m vả cái lại chả răng rụng dynamic bây giờ.
Ấy chết, anh đừng nóng, viết vậy là vì sợ một số anh em chỉ chăm chăm vào Dynamic SQL mà quên vẫn còn SQL tĩnh sừng sững xưa giờ đó. Bắt đầu ngay đây!
Xem các vị trí tuyển dụng lập trình viên SQL lương cao cho bạn
1 SQL tĩnh – Static SQL – Minh giáo
Đầu tiên, định nghĩa rõ ràng của Static SQL:
Static or Embedded SQL are SQL statements in an application that do not change at runtime , therefore, can be hard-coded into the application
SQL tĩnh là các câu SQL trong application, không thể thay đổi lúc thực thi. Do đó, có thể set cứng các câu SQL trong ứng dụng
1.1 Điểm mạnh
Tất nhiên, SQL Tĩnh (Static SQL) không phải là không có lợi thế của nó. Các ứng dụng (application) sử dụng Static SQL sẽ có hiệu năng tốt hơn so với Dynamic SQL
Dynamic statements there’s no need for pre-compilation or re-building as long as the access plans are generated at run-time
SQL tĩnh luôn được compile lúc compile time. Chính vì thế, sử dụng SQL tĩnh giúp hạn chế được số lần compile SQL khi sử dụng.
// Một câu SQL như thế này có thể xem là ví dụ hay cho Static // Sẽ được compile lúc compile time // Không có điều kiện nào làm SQL thay đổi SELECT id, first_name, last_name FROM customers;
1.2 Điểm yếu
Tuy nhiên, compile một lần cũng có điểm không tốt. Trường hợp SQL search với các điều kiện search là flexible, sẽ phải viết rất nhiều câu SQL cho từng điều kiện search khác nhau. Rõ ràng là cực kì vất vả (đôi khi là không thể thực hiện được)
Ví dụ, như trường hợp sử dụng BackLog (vô cùng quen thuộc với tầng lớp SE). Backlog có một phần tính năng search tên là Advanced Search.
Có thể thấy là advanced search có tới 10 field có thể custom, không thể biết được người sử dụng sẽ chọn tìm kiếm theo bao nhiêu field.
Lúc này Static SQL chỉ như Minh giáo, phát triển nhanh, nhiều giáo đồ sẵn sàng chết để hộ giáo, nhưng lại không thể thay đổi linh hoạt như các môn phái khác trong võ lâm.
Thật sự rất khó để viết SQL tĩnh, lúc này SQL động (lục đại môn phái) sẽ ra tay.
2. SQL động – Dynamic SQL – Lục đại môn phái
Dynamic SQL is SQL statements that are constructed at runtime; for example, the application may allow users to enter their own queries.
SQL động là những câu SQL có thể được xây dựng trong khi chương trình thực thi. Ví dụ thường thấy ở đây là ứng dụng có thể chấp nhận cho người dùng nhập những câu Query mà họ muốn
2.1 Điểm mạnh
Dynamic SQL thật sự mang tới cái động như tên của nó. Trường hợp ứng dụng cần thay đổi logic, hay các điều kiện tìm kiếm được người dùng thay đổi liên tục. Dynamic SQL tỏ ra vượt trội hơn hẳn so với Static.
Ví dụ dưới đây cho thấy sự linh hoạt của SQL động khi có nhiều điều kiện search muốn match với nhau. Trên thực tế, có thể còn phức tạp hơn, bao gồm các điều kiện search IN, OR, AND, LIKE, …
// Một câu SQL như thế này có thể xem là ví dụ hay cho Dynamic // Sẽ được compile lúc run time // Thực tế có thể có nhiều condition phức tạp hơn - ví dụ bằng Mybatis SELECT id , first_name , last_name FROM customers cus WHERE cus.id = 1 // Nếu có nhập tuổi - search theo tuổi <if test="userCondition.age != null"> AND cus.age = request.age </if> // Nếu có nhập địa chỉ - And thêm điều kiện này <if test="userCondition.address != null"> AND cus.address = request.address </if> <if test="userCondition.phone != null"> AND cus.phone = request.phone </if>
Dynamic SQL has only one advantage over static statements which can be clearly noticed once the application is edited or upgraded, so with Dynamic statements there’s no need for pre-compilation or re-building as long as the access plans are generated at run-time,
SQL động rõ ràng có lợi thế rõ rệt so với Static trong trường hợp ứng dụng sửa đổi hoặc cập nhật, Dynamic không cần phải compilation hoặc re-building lại lúc khởi chạy.
2.2 Điểm yếu
Về tốc độ, SQL động rõ ràng không thể so với SQL tĩnh (It is less swift and efficient – không nhanh chóng bằng)
Thực tế làm việc của mình với Dynamic SQL (Dự án gần đây nhất là MyBatis – các bạn có thể đọc bài về Mybatis tại đây), một số câu SQL động vô cùng phức tạp.
Mặc dù linh động để thêm, xóa điều kiện, nhưng trường hợp người viết và người maintainance khác nhau. Thực sự thì we are in a big fu**ing trouble. Khá là khỏ để hiểu, rồi đi fix bug hay gì gì đó.
3. Sự khác biệt
Static SQL | Dynamic SQL |
Không thể thay đổi lúc runtime, gần giống như hard coded. Không thể uyển chuyển như Dynamic SQL |
Một số condition trong SQL tĩnh không thể thực hiện được như Static SQL |
Performance tốt do đã được biên dịch trước lúc runtime | Performance kém hơn so với Static SQL do tạo các câu SQL trong lúc runtime |
Trường hợp có nhiều điều kiện thay đổi có thể tạo ra nhiều câu SQL khác nhau. Sẽ phải viết rất nhiêu câu | Trường hợp có nhiều điều kiện tạo ra các câu SQL khác nhau, SQL viết kiểu này sẽ không được clear cho lắm |
4. Tham khảo
Lúc cần tham khảo hoặc research, cần lưu ý các tên gọi khác của Static và Dynamic SQL. Static còn được gọi là EMBEDDED SQL. Dynamic còn có tên gọi khác là INTERACTIVE SQL.
Để tìm kiếm thêm thông tin, các vị bằng hữu trong giang hồ có thể tham khảo:
- Difference between Static and Dynamic – Geeksforgeeks
- Differences between static and dynamic SQL – IBM
- Dynamic SQL – Oracle
- Dynamic SQL: Applications, Performance, and Security
Bài viết gốc được đăng tải tại kieblog.vn
Có thể bạn quan tâm:
- Học ngôn ngữ gì cho Data Science?
- 8 công cụ miễn phí để bảo mật khi lập trình phần mềm
- Cách viết “Hello World” với 28 Ngôn ngữ Lập trình
Xem thêm IT Jobs for Developer hấp dẫn trên TopDev