در اینجا ۱۴ نکته خواندنی که می توانید در پرس و جو های خود بکار ببرید تا مطمئن شوید که کدهای T-SQL شما در بهینه ترین حالت ممکن هستند،موجود است:
1. سعی کنید نتایج querieهای خود را با دستوراتWHERE محدودتر کنید .
این کار باعث بهبود کارآیی می شود.چرا کهSQL Server تنها ردیفهای مورد نیاز را به client بر می گرداند نه همه ردیفهای موجود در جدول(ها). این کار باعث کاهش ترافیک شبکه و بهبود کامل کارآیی query می شود .
این امر به خوبی در نتیجه بهینه سازی قابل مشاهده است, چون SQL Server تنها ستونهایی خاص را به جای همه ستونها به client برمی گرداند. این کار باعث کاهش ترافیک شبکه و بهبود کامل کارآیی query می شود .
این کار باعث کاهش ترافیک شبکه شما می شود؛ چرا که client تنها نام stored procedure یا view را در عوض متن سنگین query به server ارسال می کند (احتمالا با چند پارامتر) . اینکار همچنین مدیریت permission ها را ساده تر می کند. چرا که دسترسی کاربران به ستونهای جداولی که امکان رویتشان برای آنها فراهم نیست محدود می شود.
cursorهایSQL Server در تنزل کارآیی نتیجه در مقایسه با دستورات select بسیار موثرند. تلاش کنید که از subqueryهای همبسته و یا جداولی که ایجاد می کنید ، جهت عملیات ردیف به ردیف استفاده کنید.
بدلیل اینکه SELECT COUNT(*) statement جهت برگرداندن تعداد ردیفهای کل جدول، باعث بررسی کامل جدول می شود، هنگام اعمال بر روی جدوال بزرگ ، زمان بشدت طولانی را خواهد گرفت. راه دیگری هم برای این کار موجود است. شما می توانید از جدول سیستمی sysindexes استفاده کنید. در این جدول ستونی بنام ROWS وجود دارد.
این ستون شامل تعداد ردیفهای هر جدول موجود در DB شما می باشد.. در نتیجه شما می توانید از دستور select زیر بجای SELECT COUNT(*)statement بهره برید:
SELECT rows FROM sysindexes WHERE id = OBJECT_ID('table_name') AND indid < 2
برای اطلاعات بیشتر در این مورد میتوانید از این مقاله دیدن کنید: Alternative way to get the table's row count.
Constraintها بسیار کارآ تر از triggerها هستند و می توانند در افزایش کارآیی کمک کنند.
متغییرهای از نوع Table نسبت به temporary tableها احتیاج کمتری به lockکردن و logg کردن به منابع دارند، این انواع تنها در نسخه Sql Server 2000 موجودند.
دستور HAVING جهت محدود کردن نتیجه حاصل از دستور GROUP BY می شود. هنگامی که شما از GROUP BY همراه با دستور HAVING , استفاده می کنید،دستور GROUP BY ردیفها را به مجموعه های گروهبندی شده تقسیم می کند و داده های آنها را با هم جمع می بندد و سپس دستور HAVING گروه های نامطلوب را حذف می کند. در بسیاری موارد شما می توانید دستورات select خود را با استفاده از where و group by و بدون استفاده از دستور HAVING بنویسید که باعث افزایش کارآیی query شما می شود.
چرا که استفاده از دستور DISTINCT در پایین آوردن میزان کارآیی در برخی موارد تاثیر دارد., تنها زمانی که واقعا به آن نیاز است استفاده کنید.
جمله UNION ALL بسیار سریعتر از UNION, است، چون جمله UNION ALL بدنبال ردیفهای تکراری نمی گردد در حالیکه جمله UNION بدنبال ردیفهای تکراری می گردد که آیا موجودند یا خیر.
چون بهینه ساز query در sql server بسیار باهوش است ،ابدا از optimizer hints در بهینه سازی کدهای خود استفاده نکنید، چه بسا باعث بدتر شدن آن شوید!!
اصل مقاله:http:/www.databasejournal.com/features/mssql/article.php/1437391
نویسنده مقاله:Alexander Chigrik
سلام..بسیار از نکاتی که ارائه کردید ممنونم..واقعا استفاده کردم خیلی عالی بود دستت درد نکنه..یا علی