PDA

View Full Version : نکات و تکنیک ها در SQL SERVER



Galawij
دوشنبه 01 اسفند 1390, 23:04 عصر
به نام مقام متعالی
سلام.
قصد دارم نکات تکنیکی و فنی مربوط به طراحی و پیاده سازی بانک های اطلاعاتی تحت SQL SERVER را در سه رده مقدماتی، متوسطه و پیشرفته قرار دهم.
از همه عزیزان خواستارم که در این امر مشارکت کرده و تجربیات و تخصص خود را کماکان در اختیار کاربران گذاشته، تا زمینه رشد و تعالی هر چه بیشتر خود و سایرین را فراهم آوریم.
توضیحات:

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


برکت باشد، برکت باشیم ...

Galawij
دوشنبه 01 اسفند 1390, 23:48 عصر
طراحی بانک اطلاعاتی:


سعی کنید طراحی منطقی درستی از بانک داشته باشید. بد طراحی کردن Logical Database منجر به بد طراحی شدن Physical Database می شود و در نتیجه کارایی بانک بسیار پایین می آید. اگر طراحی درستی نداشته باشیم، پیاده سازی هزینه بری خواهیم داشت و هیچ سخت افزار سریعی ضعف طراحی را نمی پوشاند( رعایت حداقل سطوح نرمال سازی).
سعی کنید در بانک کمتر از NULL استفاده کنید، استفاده از NULL کارایی را پایین می آورد، مخصوصاً زمانی که در شرط Where استفاده شود.
سعی کنید تعداد ستون ها در جداول کاهش یابد تا تعداد بیشتری سطر در یک Data Page ذخیره شود.
سعی کنید از Clustered Index ها که قدرتمندترین اندیکس ها برای SQL هستند، بیشتر استفاده کنید.
سعی کنید تعداد اندیکس ها در بانک کاهش یابد تا عملیات Delete,Insert و Update با سرعت بیشتری انجام شود.
اگر در ادامه قصد دارید از Replication استفاده کنید، این نکته را باید در همان زمان طراحی اولیه بانک در نظر بگیرید زیرا روشی که شما Replication می کنید بر طراحی بانک تأثیر می گذارد.
زمانی که بانک را طراحی می کنید، چرخ را دوباره اختراع نکنید. به این معنا که از امکاناتی که SQL Server برای تضمین صحت داده ها ایجاد کرده استفاده کنید، زیرا ایم امکانات سربار کمتری دارند. امکاناتی مانند استفاده از انواع قیدها (http://barnamenevis.org/showthread.php?329474-%D9%85%D8%A8%D8%A7%D9%86%DB%8C-%D8%A7%D8%B3-%DA%A9%DB%8C%D9%88-%D8%A7%D9%84-%D9%82%DB%8C%D8%AF%D9%87%D8%A7%28Constraints%29&p=1450252#post1450252)


ادامه دارد..

Galawij
جمعه 05 اسفند 1390, 19:02 عصر
واکشی داده ها (Select):


اگر نیاز به واکشی داده ها از یک جدول تکی دارید از View هایی که چندین جدول غیر مورد نیاز هم در آن وجود دارد ولی نیاز شما را مرتفع می کند، استفاده نکنید و مستقیماً روی همان جدول Select بزنید.
داده هایی که نیاز ندارید، برنگردانید. مثلاً اگر به تمام ستون های جدول نیاز ندارید از * Select استفاده نکنید.
اگر نیاز دارید تا وجود یک رکورد خاص را بررسی کنید از (*) Select Count استفاده نکنید و در عوض از IF EXISTS استفاده کنید. مثال:

IF EXISTS (Select 1 From TableName Where ColumnName='Value') به جای عدد 1 می توان از هر مقدار ثابت دیگری استفاده کرد.

به دقت بررسی کنید که آیا Select شما واقعاً به Distinct نیاز دارد یا نه؟ تنها در مواردی از Distinct استفاده کنید که مطمئن هستید رکوردهای تکراری دارید و شما می خواهید که داده های تکراری در نتیجه وجود نداشته باشند.


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


ادامه دارد ...

Galawij
شنبه 06 اسفند 1390, 19:31 عصر
Join:

اگر هر یک از ستون هایی که در Join (http://barnamenevis.org/showthread.php?324266-%DA%A9%D9%85%DA%A9-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D9%85%D8%B9%D9%86%DB%8C-%D9%88-%D9%85%D9%81%D9%87%D9%85%D9%88-%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D8%AC%D9%88%DB%8C%D9%86%D9%87%D8%A7-%D8%AF%D8%B1-%D8%AC%D8%AF%D9%88%D9%84) بین دو یا چند جدول شرکت کرده اند، دارای ایتدکس باشند کارایی بهینه تر خواهد شد، پس بهتر است بر روی ستون هایی که در Join شرکت می کنند ایندکس ایجاد کنید.
در انتخاب نوع صحیح (Join (Cross,Left,Right,Inner,LeftOuter,Self,RightOuter, FullOuter بین جداول دقت کنید.
برای داشتن بهترین کارایی در Join جداول، ستون هایی که Join می شوند باید نوع داده یکسانی داشته باشند.
برای داشتن بهترین کارایی در Join، ستون هایی که Join می شوند باید از نوع داده عددی باشند نه رشته ای مثل: Char, Varchar و ... .
سعی کنید تعداد Join بین جداول خود را به حداقل برسانید.
از Cross Join هرگز استفاده نکیند مگر اینکه تنها راه رسیدن شما به هدفتان باشد. چرا که این نوع Join منابع زیادی از SQL Server را به هدر می دهد(شبیه عملگر ضرب عمل می کند).

ادامه دارد ...