بررسی مزایا و معایب برنامه های تحت وب و برنامه های تحت ویندوز

مزایای برنامه های تحت ویندوز:

  1. عموماً برنامه هایی هستند که نیاز دارند به سرعت به درخواست کاربر پاسخ دهند. مانند برنامه هایی که در فروشگاهها اجرا می شوند.
  2. برنامه هایی که پردازش زیادی از پردازشگر درخواست می کنند. همچون بازی های کامپیوتری و برنامه های گرافیکی.
  3. یکی از مهمترین مزایای این نوع برنامه ها داشتن اعتبار کافی در آنهاست. مثلا این نوع برنامه می تواند به رجیستری دسترسی داشته باشد، درحالیکه برنامه های تحت وب این اعتبار را ندارند.
  4. بر برنامه کلاینت کنترل کامل دارند. در نتیجه می توان یک برنامه با رابط گرافیکی زیبا و قدرتمند طراحی کرد.
  5. سرعت عمل برنامه های تحت ویندوز از مزایای آنها محسوب می شود. چراکه پردازش تنها در سمت کلاینت صورت می گیرد و نیاز نیست که تبادل اطلاعات و داده با سرور صورت گیرد.

مزیت برنامه های تحت وب:

  1. مهمترین مزیت برنامه های تحت وب سادگی توزیع این برنامه ها بین کاربران است.(تنها نیاز به نصب برنامه روی سرور داریم)
  2. کنترل نسخه برنامه-تمام افراد از آخرین نسخه موجود روی سرور استفاده می کنند و نگرانی در مورد اینکه هر کدام از آخرین نسخه استفاده می کنند یا نه وجود ندارد.
  3. مستقل از پلت فرم هستند.اهمیتی ندارد که کاربر از چه نوع کامپیوتری استفاده می کند.

این مزایا می توانند باعث صرفه جویی بیش از میلیونها دلار هزینه نسبت به برنامه های تحت ویندوز شوند.توانایی ایجاد سریع تغییرات و نیز نگهداری و کنترل ساده ی کد این برنامه ها، از مهمترین مزایای آنها به شمار می روند.

قبل از reinstallingکردن SQL Server 2000 بعد از یک install ناموفق

 موارد زیر را از registry حذف کنید:

 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMSSQLServer
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSQLServerAgent
HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServer
HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server

و دایرکتوری نصب قبلی را هم پاک کنید.

Transact-SQL Optimization Tips

در اینجا ۱۴ نکته خواندنی که می توانید در پرس و جو های خود بکار ببرید تا مطمئن شوید که کدهای T-SQL شما در بهینه ترین حالت ممکن هستند،موجود است:

1. سعی کنید نتایج querieهای خود را با دستوراتWHERE محدودتر کنید .

این کار باعث بهبود کارآیی می شود.چرا کهSQL Server تنها ردیفهای مورد نیاز را به client بر می گرداند نه همه ردیفهای موجود در جدول(ها). این کار باعث کاهش ترافیک شبکه و بهبود کامل کارآیی query می شود .


2. سعی کنید نتایج حاصل از querieها را با  برگرداندن ستونهای خاص (بجای تمام ستونهای جدول)از جدول محدود کنید.

این امر به خوبی در نتیجه بهینه سازی قابل مشاهده است, چون SQL Server تنها ستونهایی خاص را به جای همه ستونها به client  برمی گرداند. این کار باعث کاهش ترافیک شبکه و بهبود کامل کارآیی query می شود .


3. از viewها و stored procedureها بجای querieهای سنگین استفاده کنید.

این کار باعث کاهش ترافیک شبکه شما می شود؛ چرا که client تنها نام  stored procedure یا view را در عوض متن سنگین query به server ارسال می کند (احتمالا با چند پارامتر) . اینکار همچنین مدیریت permission ها را ساده تر می کند. چرا که دسترسی کاربران به ستونهای جداولی که امکان رویتشان برای آنها فراهم نیست محدود می شود.


4. هرجا که امکانپذیر است، از بکار بردن cursorهای SQL Server خودداری کنید.

cursorهایSQL Server  در تنزل کارآیی نتیجه در مقایسه با دستورات select بسیار موثرند. تلاش کنید که از subqueryهای همبسته و یا  جداولی که ایجاد می کنید ، جهت عملیات ردیف به ردیف استفاده کنید.


5. اگر می خواهید که تعداد نهایی ردیفهای جدول را برگردانید ، می توانیدبجای SELECT COUNT(*) statement از راه دیگری استفاده کنید.

بدلیل اینکه 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. 


6. سعی کنید از constraintها بجای triggerها ، در جایی که مقدور است ، استفاده کنید.

Constraintها بسیار کارآ تر از triggerها هستند و  می توانند در افزایش کارآیی کمک کنند.


7. از متغییرهای tableی بجای temporary tableها استفاده کنید.

متغییرهای از نوع Table نسبت به temporary tableها احتیاج کمتری به lockکردن و logg کردن به منابع دارند، این انواع تنها در نسخه Sql Server 2000 موجودند.


8. هرجا که امکانپذیر است، از بکار بردن دستورات HAVING خودداری کنید.

دستور HAVING جهت محدود کردن نتیجه حاصل از دستور GROUP BY می شود. هنگامی که شما از  GROUP BY همراه با دستور HAVING , استفاده می کنید،دستور  GROUP BY ردیفها را به مجموعه های گروهبندی شده تقسیم می کند و داده های آنها را با هم جمع می بندد و سپس  دستور HAVING گروه های نامطلوب را حذف می کند. در بسیاری موارد شما می توانید دستورات select خود را با استفاده از where و group by و بدون استفاده از دستور    HAVING بنویسید که باعث افزایش کارآیی query شما می شود.


9. هرجا که امکانپذیر است، از بکار بردن دستورات DISTINCT خودداری کنید.

چرا که استفاده از دستور DISTINCT در پایین آوردن میزان کارآیی در برخی موارد تاثیر دارد., تنها زمانی که واقعا به آن نیاز است استفاده کنید.


10.دستور SET NOCOUNT ON  را در ابتدای stored procedureهای خود قرار دهید تا پس از اجرای procedure شما پیغامی مبنی بر تعداد ردیفهای حاصل از اجرای دستور T-SQLرا برنگرداند، که این امر می تواند مانع افزایش ترافیک شبکه بجهت عدم دریافت این پیغام توسط سرویس گیرنده های شما شود.


11.از دستور Select  با استفاده از کلمه کلیدی Top و یا دستور SET ROWCOUNT در هنگامی که نیاز به دریافت n رکورد اولیه را دارید، استفاده کنید.این امر می تواند کارایی پرس و جو های شما را بهبود بخشد، چرا که مجموعه جواب کوچکتری برگردانده می شود که بر ترافیک شبکه بین سرویس دهنده و سرویس گیرنده هم تاثیرگذار خواهد بود.


۱۲.از اشاره گر FAST number_rows مربوط به جدول جهت برگرداندن سریع  مقدار number_rows  استفاده کنید.در این حالت شما قادرید با نتیجه بدست آمده کار کنید، در حالیکه هنوز پرس و جو و یا procedure مشغول کار کردن بر روی نتیجه کامل خود هستند.


13. سعی کنید که از جملات UNION ALL بجای UNION در هر جا که امکان پذیر است استفاده کنید.

جمله UNION ALL بسیار سریعتر از UNION, است، چون جمله UNION ALL بدنبال ردیفهای تکراری نمی گردد در حالیکه جمله UNION بدنبال ردیفهای تکراری می گردد که آیا موجودند یا خیر.


14. از optimizer hintsدرqueriy های خود استفاده نکنید.

چون بهینه ساز query در sql server بسیار باهوش است ،ابدا از optimizer hints در بهینه سازی کدهای خود استفاده نکنید، چه بسا باعث بدتر شدن آن شوید!!

اصل مقاله:http:/www.databasejournal.com/features/mssql/article.php/1437391

نویسنده مقاله:Alexander Chigrik