میزان کارایی Stored Procedure

این مقاله تنظیم و میزان کارایی و عملکرد Stored Procedure را بیان میکند.و برخی از دستورات Stored Procedure را به طور کامل توضیح میدهد.

میزان کارایی Stored Procedure

Include SET NOCOUNT ON .1

SQL • بطور پیش فرض تعداد ردیفی که  توسط DML statement تحت تاثیر قرار گرفته اند را برمیگرداند. به طور پیش فرض NOCOUNT SET  فعال است.

•  عمدتا با هدف اشکالزدایی یا پردازش بر اساس مقادیر بازگشتی مورد نیاز است.  اطلاعات ارسال شده به کاربران به تعیین SET NOCOUNT OFF نیاز ندارد.

مزایا: این کار ترافیک شبکه را کاهش دهد.

 

SQL Code:

    --Below code will not return Number of rows affected by DML statements,  
    SET NOCOUNT OFF; 

 

2. بجای استفاده از نام شی، هم از نام schema و هم از نام شی برای دسترسی به اشیاء دیتابیس استفاده کنیم.

اگر طرح یا نام مناسبی از شی مشخص نباشد، SQL سرور در تمام شماهای ممکن شی را جستجو کرده و تصمیم می گیرید که از کدام طرح برای استفاده از شی استفاده کند.

در عوض اگر شما از نام شی بطور مناسب استفاده کرده باشید ، می توانید جستجو را ذخیره کرده و در زمان تصمیم گیری را کاهش داد.

مزایا:  زمان جستجو  و تصمیم گیری را کاهش میدهد
کد SQL

    --Existing / Old Code  
    SELECT * FROM Customer  
    --Best Practice /New Code  
    SELECT * FROM dbo.Customer  

 3. از پیشوند sp_ در نام    استفاده نکنید  Stored Procedure

پیشوند sp_   برای تعیین   stored procedureهای سیستم است .هنگام استفاده از پیشوند sp_ در SQL server  اول دیتابیس مستر (Master) را جستجو میکند و اگر قادر به پیدا کردن Stored procedures  نباشد ، آن را در session جاری دیتابیس جستجو میکند.

مزایا: کاهش زمان جستجو در پایگاه داده مستر.

4. اجتناب از تراکنش های طولانی:
ورود به تراکنش بلاک  خواهد شد و عملکرد را با مسدود کردن منابع کاهش میدهد.
بنابراین تراکنش را تا حد ممکن کوتاه نگه دارید.

 

5. با دستور IF Exist ، بجای استفاده از Select (1)   از Select * استفاده میکنیم

دستور Select * تمام رکوردهای جدول را پردازش میکند. (Select (1  برای چک کردن یک رکورد در جدول است.

SQL Code:

    --Existing / Old Code  
    IF EXISTS ( SELECT * FROM sys.objects  
    WHERE object_id = OBJECT_ID(N'ProcName')  
    AND type IN ( N'P', N'PC' ) )  
    --Best Practice /New Code  
    IF EXISTS ( SELECT 1 FROM sys.objects  
    WHERE object_id = OBJECT_ID(N'ProcName')  
    AND type IN ( N'P', N'PC' ) ) 

 

6. عدم استفاده ی SELECT *، به جای استفاده از Select نام ستون(Select ColumnNames)

هنگامیکه شما  به تمام ستون جدول  نیاز دارید از SELECT *، استفاده کنید . برای تمام موارد دیگر از Select ColumnNames استفاده کنید.

SQL Code:

    --Existing / Old Code  
    SELECT * FROM dbo.Customer  
    --Best Practice /New Code  
    SELECT CustomerId, CustomerName, CustomerAddress FROM dbo.Customer  

 

7. استفاده از دستور NOLOCK در تمام موارد و یا عدم استفاده برای تمام موارد .

اگر در  stored procedure از پارامتر براساس کد بلاک (if/else)  استفاده کرده باشید  و اگر فقط در برخی موارد  از (WITH (NOLOCK استفاده کرده باشید ، منجر به اجرای بد میشود .

این باید در تمام موارد یا نباید در تمام موارد استفاده شود.

کد SQL:

    Create Procedure GetCustomerInfoByLob  
    (  
    @LOBCd NVARCHAR(10)  
    )  
    As   
    BEGIN  
    --Select All PL Customers  
    IF @LOBCd="PL"  
    SELECT * FROM PLData WITH (NOLOCK)  
    --Select All CL Customers  
    ELSIF @LOBCd="PL"  
    --Below Line of Code will lead to Bad Execution code.  
    SELECT * FROM PLData  
    --Select All(Both PL and CL) Customers  
    ELSE   
    SELECT * FROM PLData WITH (NOLOCK) UNION  
    SELECT * FROM PLData WITH (NOLOCK)  
    END  

 

دانلود نسخه ی PDF این مطلب