۱-نام stored precedure ها را با sp_ شروع نکنید. sp های سیستمی در SQL Server با sp_ شروع میشوند. وقتی شما هم از چنین نامگذاری استفاده کنید SQL Server برای اجرای sp ابتدا بین sp های سیستمی خودش میگردد. البته این تنها مشکل نیست، اگر sp شما که نامش با پیشوند sp_ آغاز شده مشابهی در دیتابیس master داشته باشد، sp شما هیچ وقت اجرا نخواهد شد!
۲-از عبارت SET NONCOUNT ON استفاده کنید تا پس از هر اجرای sp از نمایش پیامی که تعداد ردیفهای تحت تاثیر اجرا (rows affacted) را نشان میدهد جلوگیری شود.
۳-sp ها را با نام کاملشان فراخوانی کنید. نام کامل هر شیء از ۴ قسمت تشکیل شده: نام سرور، نام دیتابیس، نام مالک (owner)، نام شیء. فراخوانی sp ها با نام کامل باعث افزایش کارآیی به خاطر بیشتر شدن احتمال استفاده مجدد از execution plan مربوط به sp میشود.
۴-از عبارت return برای بازگرداندن مقادیر عددی استفاده کنید. برنامهنویسان از عبارت return معمولاً برای چک کردن خطاها استفاده میکنند، اگر در یک کوئری نیاز به برگرداندن مقداری عددی دارید به جای آنکه آن را با select و در قالب record set به برنامه برگردانید از عبارت return استفاده کنید.
۵-از sp_executesql به جای EXECUTION استفاده کنید. با استفاده از sp_executesql میتوانید از پارامترها استفاده کنید و البته این کار باعث امکان استفاده مجدد از execution plan و در نتیجه بهترشدن کارآیی و سرعت میشود، چرا که در اجرای مجدد sp_executesql برای یک کوئری ثابت تنها متغیرها مقادیر پارامترهای آن کوئری هستند.
۶-از به کار بردن جداول موقت در stored procedure خودداری کنید. این یکی از مواردی است که تفاوت سرعت و کارآیی را در آن (در تعداد رکورد زیاد) شخصاً تست کردم. جداول موقت (temporary tables) واقعاً سرعت کار را پایین میآورند.
۷-از SQL Server Profiler استفاده کنید تا sp هایی که بیشتر recompile شدهاند را شناسایی کنید، سپس کد این sp ها را برای جلوگیری از کامپایل مجدد بهینه کنید.







من احساس میکنم یک باگی وجود داره. تو الان صفحه اول سایتت هستی میخوای به پست بلاگفات دسترسی پیدا کنی، چه جوری میتونی
به نظر میرسه آرشیوها کمی مشکل دارند. شاید هم ایراد از قالب باشه. ممنون به خاطر توجهت، رفعش میکنم
Nice post!