Skip to main content

Stored Procedure trong SQL: Hướng dẫn và Cách Tối Ưu

· 3 min read

1. Stored Procedure là gì?

Stored Procedure (thủ tục lưu trữ) là một tập hợp các câu lệnh SQL được lưu trữ trong cơ sở dữ liệu và có thể được thực thi nhiều lần mà không cần viết lại.

Lợi ích của Stored Procedure:

  • Hiệu suất cao: Giảm chi phí biên dịch câu lệnh SQL.
  • Tăng cường bảo mật: Giới hạn quyền truy cập vào dữ liệu.
  • Dễ bảo trì: Tách biệt logic xử lý khỏi mã ứng dụng.
  • Giảm tải cho ứng dụng: Giảm số lượng truy vấn gửi từ ứng dụng đến server.

2. Cách tạo Stored Procedure trong SQL Server

Sử dụng cú pháp sau để tạo một Stored Procedure:

CREATE PROCEDURE GetCustomerByID
@CustomerID INT
AS
BEGIN
SELECT * FROM Customers WHERE CustomerID = @CustomerID;
END;

Gọi Stored Procedure:

EXEC GetCustomerByID @CustomerID = 1;

3. Ví dụ thực tế về Stored Procedure

Dưới đây là một Stored Procedure tính tổng doanh thu theo tháng:

CREATE PROCEDURE GetMonthlyRevenue
@Year INT,
@Month INT
AS
BEGIN
SELECT SUM(TotalAmount) AS Revenue
FROM Orders
WHERE YEAR(OrderDate) = @Year AND MONTH(OrderDate) = @Month;
END;

Gọi Stored Procedure:

EXEC GetMonthlyRevenue @Year = 2024, @Month = 3;

4. Cách tối ưu Stored Procedure

4.1. Sử dụng Index để tăng tốc truy vấn

Trước khi tạo Stored Procedure, hãy đảm bảo các cột lọc có index phù hợp.

CREATE INDEX idx_orderdate ON Orders (OrderDate);

4.2. Tránh sử dụng SELECT *

Chỉ lấy các cột cần thiết thay vì lấy tất cả dữ liệu.

SELECT OrderID, CustomerID, TotalAmount FROM Orders WHERE OrderDate >= '2024-01-01';

4.3. Tận dụng SQL Execution Plan

Dùng EXPLAIN hoặc SHOW EXECUTION PLAN để kiểm tra hiệu suất.

4.4. Dùng TRY...CATCH để xử lý lỗi

CREATE PROCEDURE SafeInsertOrder
@CustomerID INT,
@OrderDate DATE,
@TotalAmount DECIMAL(10,2)
AS
BEGIN
BEGIN TRY
INSERT INTO Orders (CustomerID, OrderDate, TotalAmount)
VALUES (@CustomerID, @OrderDate, @TotalAmount);
END TRY
BEGIN CATCH
PRINT 'Lỗi khi chèn dữ liệu: ' + ERROR_MESSAGE();
END CATCH
END;

5. Kết luận

Stored Procedure là một công cụ mạnh mẽ giúp tối ưu hóa hiệu suất truy vấn và bảo mật dữ liệu. Việc sử dụng đúng cách có thể giúp hệ thống SQL chạy nhanh hơn và ổn định hơn.

Bạn đã từng tối ưu Stored Procedure trong SQL chưa? Hãy chia sẻ kinh nghiệm của bạn!