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

پنجشنبه 30 اردیبهشت 1395

این مقاله تنظیم و میزان کارایی و عملکرد 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  

آموزش نصب sql server 2017

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید