travel

7 نکته برای افزایش عملکرد کوئری ها در SQL Server

وقتی صحبت از بهینه سازی عملکرد کوئری ها برای کاهش زمان پاسخ به برنامه های وب در SQL میشود، اغلب شاهد تغییراتی در لایه برنامه یا ایندکس گذاری روی ستونهای جداول پایگاه داده هستیم و کمتر به بهینه سازی خود کوئری SQL توجه می شود. حتی معماران و توسعه دهندگان متخصص نیز فراموش می کنند که عملکرد پایگاه داده از داخل همین پرس و گاهی از نام پرس و جو باید شروع میشود. در اینجا هفت نکته ساده آورده شده است که عملکرد جستجوی SQL شما را افزایش می دهد.


وقتی صحبت از بهینه سازی عملکرد کوئری ها برای کاهش زمان پاسخ به برنامه های وب در SQL  میشود، اغلب شاهد تغییراتی در لایه برنامه یا ایندکس گذاری روی ستونهای جداول پایگاه داده هستیم و کمتر به بهینه سازی خود کوئری SQL توجه می شود. حتی معماران و توسعه دهندگان متخصص نیز فراموش می کنند که عملکرد پایگاه داده از داخل همین پرس و گاهی از نام پرس و جو باید شروع میشود. در اینجا هفت نکته ساده آورده شده است که عملکرد جستجوی SQL شما را افزایش می دهد.

1 Owner/Schema Name

تمام آبجکت های در Sql اعم از رویه ها، جداول و... بهتر است که اسکیما داشته باشند. علت این امر این است:  زمانی که اسکیمایی برای آنها در نظر گرفته نمیشود موتور SQL برای پیدا کردن انها تمام اسکیماها را جستجو خواهد کرد درصورتیکه با داشتم اسکیما موتور SQL مستقیم در همان اسکیما به دنبال آبجکت مورد نطر میگردد.

2 عملگر * (Operator *)

این نکته شاید تکراری باشد ولی انقدر مهم است که بار دیگر گفته شود. استفاده از عملگر * در کوئری ها وقتی حتی تمام فیلدهای جدول را نیاز دارید بازهم اشتباه بزرگی است. چرا که ممکن است بعدها در روند توسعه فیلدهای دیگری هم به جدول اضافه شوند که نیازی به خواندن آنها نباشد ولی با عملگر * آنها را همواره میخوانیم بون اینکه نیاز داشته باشیم. این مسئله زمانی حجم که داده ها بسیار بالاست یا وقتی که فیلدها شامل داده های مهمی است که نباید دیده شوند اهمیت زیادی پیدا میکند.

3 Nullable Columns

وقتی که احتمال میدهید مقادیر ستونها ممکن است نال باشند نباید از دستور NOT IN استفاده کنید. دستور NOT IN  میانه خوبی با مقادیر نال ندارد! بجای آن میتوانید از دستور NOT EXIST استفاده کنید. وقتی از دستور NOT IN استفاده میکنیم حتی زمانی که هیچ رکوردی مقدار نال ندارد SQL نتایج را چک میکند که آیا نال هستند یا خیر در صورتیکه دستور NOT EXIST این کار انجام نمیدهد.

4 Table Variable And Join

این نصیحت حکیمانه را از من قبول کنید هیچوقت از Table Variable ها در در Join ها خود استفاده نکنید بجای آن انتخاب های زیادی دارید مانند temporary table و cte و...

حتی اگر variable Table ها در بسیاری از شرایط بسیار سریع و کارآمد باشند با این وجود موتور SQL به آنها بصورت یک ردیف نگاه میکند تا یک جدول. همین امر باعث میشود در JOIN ها عملکرد وحشتناکی را داشته باشند.

5 Store Procedure Name

نام رویه ها یا StoreProcedure ها بسیار مهم است که با sp_ یا SP_ شروع نشوند.  این شروع یک نشانه برای SQL است که اول برای جستجوی رویه به سراغ دیتابیس ها system/master برود.

6 استفاده از SET NOCOUNT ON

زمانی که از دستورات DML مانند Sleect, Insert, Update, Delete استفاده میکنید SQL  تعداد رکوردهایی که در استفاده از این دستورات تاثیر گرفته اند را برمی گرداند. در کوئری های بسیار پیچیده با Join های زیاد این مورد باعث کاهش بهینه بودن عمرکرد کوئری میشود. با استفاده از دستور SET NOCOUNT ON میتوانید مانع این محاسبه شوید.

7 جلوگیری از استفاده بیمورد از Group By, Order By, Distinct

زمانی که از ستورانی مانند Group By, Order By, Distinct استفاده میکنید SQL  اقدام به ساختن جدولی به نام Work Table میکند و داده ها را در آن قرار میدهد. بعداز اینکه عملیات موردمیاز را انجام داد دوباره دیتا ها به جای اول برمیگرداند و به خروجی میفرستند. بنابراین تا زمانی که نیاز واقعی به استفاده از این دستورات ندارید آنها را بکار نگیرید.


به اشتراک بگزارید:

نویسنده - شرکت آرشین پیشرو

. ویراستار شرکت آرشین پیشرو

نظر خود را درج کنید

نام شما