Nếu bạn biết trước danh sách kết quả trả về không có kết quả nào giống nhau thì thao tác sắp xếp mà máy chủ SQL phải thực hiện trở nên không cần thiết.. Bởi vậy khi bạn cần dùng toán tử
Trang 1SQL và không có ý nghĩa gì nếu tập hợp kết quả của bạn chỉ bao gồm những bản ghi độc nhất
Chỉ dùng UNION khi cần
Cũng giống như trường hợp từ khóa DISTINCT, toán
tử UNION đòi hỏi thêm thao tác SORT để máy chủ SQL có thể loại bỏ những kết quả trùng lặp Nếu bạn biết trước danh sách kết quả trả về không có kết quả nào giống nhau thì thao tác sắp xếp mà máy chủ SQL phải thực hiện trở nên không cần thiết Bởi vậy khi bạn cần dùng toán tử UNION để nối hai tập hợp bản ghi với nhau, trong đó các bản ghi là độc nhất không trùng lặp, tốt hơn bạn nên dùng toán tử UNION ALL Toán tử UNION ALL không loại bỏ các bản ghi
trùng lặp bởi vậy sẽ giảm nhẹ phần công việc cho máy chủ SQL trong quá trình xử lý do không phải
Trang 2thực hiện thao tác sắp xếp Giảm bớt công việc cho máy chủ SQL đồng nghĩa với việc thao tác xử lý sẽ được thực hiện nhanh hơn
Áp dụng các thói quen tốt để code nhanh hơn
Có rất nhiều lý do để tập luyện cho mình quen với lối viết code tối ưu Khi bạn áp dụng thành thạo những thủ thuật nhỏ nêu trên và biến nó thành thói quen mỗi khi viết câu lệnh T-SQL, bạn sẽ tránh được rủi ro có thể xảy ra khi cơ sở dữ liệu thay đổi, đồng thời cải thiện hiệu suất làm việc của máy chủ nhờ giảm thiểu lưu lượng truyền tải qua mạng Những thủ thuật rất đơn giản này còn giúp bạn tận dụng tốt hơn tài
nguyên máy chủ trong quá trình xử lý câu lệnh
Trang 3Để nâng cao hiệu suất máy chủ SQL và giảm thiểu các lỗi tiềm tàng cho ứng dụng, chúng ta cần phải tập viết code câu lệnh T-SQL một cách tối ưu nhất
Trong phần đầu của bài viết, các bạn đã được giới thiệu một số thủ thuật hữu ích giúp máy chủ giảm bớt những thao tác thừa Phần hai này sẽ tập trung vào việc làm thế nào để tối ưu hóa thủ tục lưu trữ đa
năng
Thủ tục lưu trữ đa năng
Trước khi bước vào vấn đề làm thế nào để tối ưu hóa thủ tục lưu trữ đa năng (Jack Of All Trades Stored Procedure - SP), chúng ta cần có một chút khái niệm
về loại thủ tục này Thủ tục lưu trữ đa năng là thủ tục chấp nhận nhiều tham số khác nhau có liên quan đến thủ tục Dựa trên các tham số được truyền vào, thủ
Trang 4tục lưu trữ đa năng xác định bản ghi nào sẽ được trả
về Sau đây là một ví dụ về thủ tục lưu trữ đa năng: CREATE PROCEDURE JackOfAllTrades
(@SalesOrderID int = NULL
,@SalesOrderDetailID
int = NULL
,@CarrierTrackingNumber nvarchar(25) = NULL)
AS
SELECT * FROM
AdventureWorks.Sales.SalesOrderDeta
il
WHERE
(SalesOrderID =
@SalesOrderID or @SalesOrderID IS NULL)
AND (SalesOrderDetailID =
@SalesOrderDetailID or
@SalesOrderDetailID IS
Trang 5NULL)
AND (CarrierTrackingNumber =
@CarrierTrackingNumber or
@CarrierTrackingNumber
IS NULL)
GO
Ở đây SP JackOfAllTrades chấp nhận ba tham số
khác nhau Tất cả các tham số này có giá trị mặc định
là NULL Khi một giá trị được truyền vào, nó sẽ
được sử dụng như một tham số trong mệnh đề
WHERE để ràng buộc các bản ghi trả về Mỗi tham
số trong SP được dùng để xây dựng một mệnh đề WHERE phức tạp chứa logic sau đây trong mệnh đề WHERE đối với mỗi tham số truyền vào:
(<TableColumn> = @PARM or @PARM IS NULL)
Logic trên cho biết nếu @PARM được truyền giá trị non-null thì sẽ ràng buộc bản ghi trả về để chắc chắn