میزان کارایی Stored Procedure
پنجشنبه 30 اردیبهشت 1395این مقاله تنظیم و میزان کارایی و عملکرد 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
- 2k بازدید
- 9 تشکر