SSV
+2

Ưu điểm, nhược điểm của Stored Procedures SQL Server

1. Giới thiệu

  • Stored Procedure là một nhóm câu lệnh Transact-SQL đã được compiled (biên dịch) và chứa trong SQL Server dưới một tên nào đó và được xử lý như một đơn vị (chứ không phải nhiều câu SQL riêng lẻ).

Trước khi tìm hiểu ưu nhược điểm hay cách tối ưu hóa một thủ tục lưu trữ. Bạn phải có kiến thức về SQL cũng như các truy vấn cơ bản trong SQL,...

2. Ưu điểm

  1. Hiệu suất tốt: các cuộc gọi thủ tục nhanh chóng và hiệu quả vì các thủ tục lưu trữ được biên dịch một lần và được lưu trữ ở dạng thực thi. Mã thực thi được tự động lưu trữ, do đó làm giảm yêu cầu bộ nhớ. Khi thực thi một câu lệnh SQL thì SQL Server phải kiểm tra permission xem user gởi câu lệnh đó có được phép thực hiện câu lệnh hay không đồng thời kiểm tra cú pháp rồi mới tạo ra một execute plan và thực thi. Nếu có nhiều câu lệnh như vậy gởi qua network có thể làm giảm đi tốc độ làm việc của server. SQL Server sẽ làm việc hiệu quả hơn nếu dùng stored procedure vì người gởi chỉ gởi một câu lệnh đơn và SQL Server chỉ kiểm tra một lần sau đó tạo ra một execute plan và thực thi. Nếu stored procedure được gọi nhiều lần thì execute plan có thể được sử dụng lại nên sẽ làm việc nhanh hơn. Ngoài ra cú pháp của các câu lệnh SQL đã được SQL Sever kiểm tra trước khi save nên nó không cần kiểm lại khi thực thi.
  2. Năng suất cao hơn: vì khả năng tái sử dụng mà không cần phải viết lại các câu lệnh SQL lặp đi lặp lại nên do đó năng suất tạo ra cao hơn.
  3. Khả năng mở rộng và bảo trì: các thủ tục lưu trữ tăng khả năng mở rộng bằng cách cách ly xử lý ứng dụng trên server. Nếu cần bất kỳ thay đổi nào, bạn chỉ cần thay đổi thủ tục lưu trữ mà không cần chạm vào mã ứng dụng.
  4. Bảo mật tốt: giả sử chúng ta muốn giới hạn việc truy xuất dữ liệu trực tiếp của một user nào đó vào một số tables, ta có thể viết một stored procedure để truy xuất dữ liệu và chỉ cho phép user đó được sử dụng stored procedure đã viết sẵn mà thôi chứ không thể "đụng" đến các tables đó một cách trực tiếp. Ngoài ra stored procedure có thể được encrypt (mã hóa) để tăng cường tính bảo mật.
    ...

3. Nhược điểm

  1. Khả năng kiểm tra: logic nghiệp vụ được gói gọn trong các thủ tục lưu trữ nên rất khó kiểm tra (nếu được kiểm tra). Việc viết các kiểm thử cho bất kỳ logic nghiệp vụ nào trong một thủ tục lưu trữ là không thể, bởi vì không có cách nào để phân tách rõ ràng logic nghiệp vụ.
  2. Khả năng gỡ lỗi: tùy thuộc vào các hệ quản trị cơ sở dữ liệu, việc gỡ lỗi các thủ tục sẽ không thực hiện được hoặc cực kỳ khó hiểu. Chẳng hạn như SQL Server có khả năng sửa lỗi và những hệ quản trị cơ sở dữ liệu khác thì không có. Điều này rất khó khăn cho lập trình viên. (trên nền tảng phát triển doanh nghiệp điển hình)
  3. Sợ thay đổi: một trong những nhược điểm lớn nhất của các thủ tục lưu trữ là cực kỳ khó để biết phần nào của hệ thống sử dụng chúng và phần nào không. Đặc biệt là nếu phần mềm được chia thành nhiều ứng dụng thì thường không thể tìm thấy tất cả các tài liệu tham khảo trong một lần (hoặc hoàn toàn nếu nhà phát triển không đọc quyền truy cập vào tất cả các dự án) và do đó khó có thể tự tin thiết lập một cách chắc chắn thay đổi sẽ ảnh hưởng đến hệ thống tổng thể. Kết quả là các thủ tục được lưu trữ có nguy cơ rất lớn trong việc đưa ra các thay đổi vi phạm và các nhóm phát triển thường né tránh thực hiện bất kỳ thay đổi nào. Đôi khi điều này có thể dẫn đến làm tê liệt những đổi mới công nghệ mới.
    ...

4. Kết luận

  • Đây là một số vấn đề mà cá nhân tìm hiểu và gặp phải. Rõ ràng có nhiều lý do tốt để sử dụng nó nhưng bên cạnh đó, các hạn chế là sự đánh đổi khá lớn.
  • Bài viết có thể bỏ qua nhiều thứ về thủ tục lưu trữ. Xin vui lòng đóng góp ý kiến ở bình luận.

All Rights Reserved