Sự khác biệt cốt lõi giữa Stored Procedure và User-Defined Function (UDF) trong T-SQL là gì, và việc lựa chọn sai đối tượng này ảnh hưởng thế nào đến kiến trúc hệ thống?
1. Phân biệt Stored Procedure và UDF
- Stored Procedure (SP):
- Có thể thực hiện các thao tác thay đổi dữ liệu (DML: INSERT, UPDATE, DELETE) và quản trị hệ thống (DDL).
- Hỗ trợ trả về nhiều tập dữ liệu (result sets), tham số đầu ra (OUTPUT parameters) và mã trạng thái trả về (RETURN value).
- Không thể được gọi trực tiếp bên trong một câu lệnh SELECT.
- User-Defined Function (UDF):
- Scalar Function và Inline Table-Valued Function chỉ thực hiện đọc dữ liệu (không được chứa các lệnh thay đổi dữ liệu hoặc gọi stored procedure).
- Có thể được lồng trực tiếp vào trong các câu lệnh SELECT, WHERE, JOIN.
2. Ảnh hưởng kiến trúc khi sử dụng sai
- Lạm dụng Scalar UDF: Scalar UDF thực thi một cách tuần tự cho từng dòng dữ liệu trong tập kết quả (Row-by-row execution), gây suy giảm hiệu năng nghiêm trọng (Performance bottleneck) trên các bảng lớn. Từ SQL Server 2019, tính năng Scalar UDF Inlining đã được giới thiệu để khắc phục phần nào, nhưng bản chất kiến trúc vẫn nên hạn chế.
- Sử dụng sai Multi-Statement Table-Valued Functions (MSTVF): MSTVF khai báo một biến bảng bên trong và trả về nó. SQL Server thường ước lượng số dòng sai lệch nghiêm trọng (thường cố định là 1 hoặc 100 dòng) đối với MSTVF, dẫn đến Execution Plan kém tối ưu.
3. Lựa chọn tối ưu
- Sử dụng Stored Procedure cho các business logic phức tạp, xử lý dữ liệu hàng loạt (Batch processing), tương tác DML.
- Sử dụng Inline Table-Valued Function (ITVF) thay cho Scalar UDF và MSTVF khi cần tái sử dụng logic truy vấn có trả về bảng, vì ITVF được biên dịch nội tuyến (inlined) vào câu lệnh gọi chính giống như một View có tham số.
4. Lưu ý thực chiến Enterprise
Tránh tuyệt đối việc viết Business Logic phức tạp nằm sâu bên trong các Scalar UDF được gọi từ câu lệnh SELECT của các báo cáo lớn.
Làm Chủ Phỏng Vấn & Nâng Cao Trình Độ Chuyên Nghiệp
Hệ thống khóa học thực chiến chuẩn Enterprise giúp bạn tự tin chinh phục mọi kỳ phỏng vấn kỹ thuật và thăng tiến thu nhập.
Tải Tuyển Tập 100+ Câu Hỏi Phỏng Vấn Chuyên Sâu (PDF)
Bộ tài liệu chuẩn Senior do Unicode Academy tuyển chọn & biên soạn, hỗ trợ tải về định dạng PDF chuẩn in ấn.
Cần Mentor Phỏng Vấn Thử 1-1 & Tối Ưu CV?
Mô phỏng phỏng vấn kỹ thuật thực tế 1-1 qua Google Meet, nhận xét chi tiết điểm mạnh/yếu và sửa CV trực tiếp cùng giảng viên Unicode.
Kiểm Tra CV Chuẩn ATS Miễn Phí
Tải CV của bạn lên để hệ thống AI rà soát từ khóa kỹ năng, định dạng và tính điểm chuẩn nhà tuyển dụng.
Câu hỏi t-sql liên quan cùng chủ đề
- Làm thế nào để tối ưu hóa hiệu năng và quản lý Stored Procedures trong dự án T-SQL? Entry
- Làm thế nào để tối ưu hóa hiệu năng và quản lý Try-Catch error handling trong dự án T-SQL? Entry
- Khi nào nên sử dụng câu lệnh Merge trong t-sql thay vì kết hợp nhiều câu lệnh Insert, Update và Delete riêng biệt? Junior
- Sự khác biệt giữa câu lệnh Truncate Table và Delete trong t-sql là gì? Khi nào Junior Developer nên chọn sử dụng Truncate thay vì Delete? Junior
- Làm thế nào để sử dụng biến bảng (Table Variable) và bảng tạm (Temporary Table) một cách hiệu quả trong T-SQL, và yếu tố nào quyết định việc lựa chọn giữa hai đối tượng này? Junior


