2013-07-24 32 views
5

Tôi đang cân nhắc tác động hiệu suất tiềm năng của việc sử dụng một trong ba phương pháp khác nhau để trả về một giá trị vô hướng đơn lẻ từ thủ tục được lưu trữ đến thường trình C# của tôi. Bất cứ ai có thể cho tôi biết cái nào trong số này là "nhanh hơn" và quan trọng nhất là tại sao?Kết quả hiệu suất của máy chủ SQL so với giá trị trả về

Phương pháp 1:

CREATE PROCEDURE GetClientId 
    @DealerCode varchar(10) 
AS 
BEGIN 
    SET NOCOUNT ON 
    SELECT ClientId 
     FROM Client 
     WHERE ClientCode = @DealerCode 
END 
-- this returns null if nothing is found, 
-- otherwise it returns ClientId in a ResultSet 

Cách 2:

CREATE PROCEDURE GetClientId 
    @DealerCode varchar(10), 
    @ClientValue int out 
AS 
BEGIN 
    SET NOCOUNT ON 
    set @ClientValue = -1 
    set @ClientValue = (SELECT ClientId 
     FROM Client 
     WHERE ClientCode = @DealerCode) 
END 
-- this returns -1 for ClientValue if nothing is found, 
-- otherwise it returns ClientId 
-- the value for ClientValue is a scalar value and not a ResultSet 

Phương pháp 3:

CREATE PROCEDURE GetClientId 
    @DealerCode varchar(10) 
AS 
BEGIN 
    SET NOCOUNT ON 
    declare @ClientValue int 
    set @ClientValue = 
     (SELECT ClientId FROM Client WHERE ClientCode = @DealerCode) 
    if @ClientValue is null or @ClientValue = 0 
     return -1 
    else 
     return @ClientValue 
END 
-- this uses the return value of the stored procedure; 
-- -1 indicates nothing found 
-- any positive, non-zero value is the actual ClientId that was located 

Trả lời

2

Trả về một giá trị vô hướng là hiệu quả hơn so với một tập kết quả, lý do là kết quả thiết lập mang nhiều phương thức trợ giúp nhiều hơn cùng với nó, làm cho nó nặng, do đó làm tăng độ trễ trong truyền của obj ect từ sql đến C# code/routine. Trong phương pháp của bạn 3: Bạn đã sử dụng một biến để trả về giá trị này tốt hơn là gửi tham số ngoài vì ở đây bạn cắt giảm đi một đối tượng ít nhất trong một tuyến (ví dụ, khi gọi thủ tục lưu sẵn).).

Tập kết quả linh hoạt hơn tham số đầu ra vì nó có thể trả về nhiều hàng (hiển nhiên), vì vậy nếu bạn cần một tập kết quả thì đó là lựa chọn duy nhất.

Để đặt hàng các truy vấn dựa trên hiệu suất mà đi như Phương pháp 3, Phương pháp 2 Phương pháp 1.

Hy vọng điều này là hữu ích trong việc tìm hiểu các khái niệm.

+1

Độ chính xác khác. Với Phương pháp 3 (RETURN), bạn bị giới hạn ở loại INTEGER. Nếu bạn muốn trả về một kiểu dữ liệu khác, bạn nên sử dụng Phương pháp 2 hoặc Phương pháp 1. –

+0

Tôi đánh giá cao tất cả sự trợ giúp. Cá nhân, tôi đang nghiêng về phía # 2. Tuy nhiên, khi tôi trả về một INTEGER ở cả hai # 2 và # 3, tôi có thể thấy vị trí # 3 sẽ có hiệu suất tốt nhất. Tôi sẽ sử dụng # 2 nếu tôi phải trả về một số loại chuỗi. Tất nhiên, như đã quy định trước đây, tôi sẽ chỉ sử dụng # 1 nếu tôi cần một tập kết quả. –

Các vấn đề liên quan