0

بهینه سازی پایگاه داده های SQL SERVER - بخش اول

 
kosarsh
kosarsh
کاربر برنزی
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1138
محل سکونت : خوزستان

بهینه سازی پایگاه داده های SQL SERVER - بخش اول
چهارشنبه 17 خرداد 1391  11:17 PM

الف - نگاه کلی

پس از فراگیری اصول نرم افزار SQL server، ساختن پرس و جوهایی که به شما اجازه می دهند محتویات یک یا چند جدول را بطور انتخابی مشاهده کنید انصافا آسان است. با این وجود، اگرچه برای ساختن این پرس و جوها ممکن است مدت زمان اندکی صرف شده باشد، شما شاید دیگر تعجب نکنید که اجرا کردن آنها(پرس و جوها) تا چه مدت زمانی طول می کشد. درحقیقت، هنگامی که اولین پرس و جو برای کامل شدن ساعتها طول می کشد، خیلی عادی است که نرم افزار SQL در آغاز کار سریعا ناپدید گردد! این کار بخاطر دو فاکتور انجام میشود:


اول از همه، دستیابی نرم افزار SQL از طریق یک برنامه راه انداز اتصال به بانک اطلاعاتی(ODBC) هرگز به اندازه عملیات اصلی بانک اطلاعاتی کامل نخواهد بود. این بدین معنی است که همچنان برنامه راه انداز ODBC لایه دیگری را به کل پردازش اضافه می کند. لایه های بیشتری که اضافه میشوند، آن پردازش کمتر خواهد بود. با این وجود، همچنین زیاد برآورد کردن این تاثیر خیلی عادی است.


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


زیرا تنها چند تکنیک برای بهینه سازی پرس و جوها وجود دارند، که در ابتدا کار ساده ای به نظر می رسند. بعد از این همه، برای بررسی کردن تنها چند چیز وجود دارد، درست؟ با اینکه این صحیح است، اما بعضی از تکنیکها بسیار وقت گیرند و به درک خوبی از جداول، لیست یا لغتنامه داده ها و تئوری شاخص نیاز دارند.


تکنیکهای بهینه سازی در زیر بطور خلاصه بیان میشوند.

اطمینان حاصل کردن از کاربرد صحیح شاخصها

بطور موثر استفاده از شاخصهای یک جدول، سختترین تکنیکی می باشد که بکار می رود. به هر حال، این تکنیک همچنین بهترین نتایج را ایجاد می کند . برای این استدلال بعنوان مهمترین تکنیک محسوب میشود. قبل از ادامه این بحث، ارزشمند است که هدف یک شاخص را بطور سریع بررسی کنیم.


نگاه کلی شاخص:

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


دو مثال کلاسیک این موضوع را روشنتر می سازد. یک فیلد شماره مشتری صرفا آن مشتری را مشخص می کند، همانطور که هیچ دو مشتری ای نمی توانند شماره مشتری یکسانی داشته باشند. بنابراین، فیلد شماره مشتری می تواند برای شاخص اصلی استفاده گردد. از طرف دیگر، کد پستی یک مشتری منحصر بفرد نیست. این موضوع بدین معناست که بسیاری از مشتریها می توانند کد پستی یکسانی داشته باشند. از این رو، کد پستی مشتری ممکن است بعنوان شاخص فرعی استفاده شود.


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


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


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


شاخصها تا حد زیادی می توانند سرعت عملیات بانک اطلاعاتی را بهبود دهند، اما اینکه چطور و چه موقعی آنها اجراء میشوند، عامل مهمی در دریافتن منافع کاری است. چون هدف آنها قادر کردن موتور بانک اطلاعاتی برای یافتن سریع رکوردها و مرتب کردن آنهاست، کاندیدهای احتمالی برای شاخص کردن همان فیلدهایی هستند که مکرر جستجو، مرتب میشوند یا برای متصل کردن جداول به هم بکار می روند. با این وجود، این هنوز ایده خوبی است که در انتخاب فیلدها برای شاخص کردن تا حدی محتاط باشیم. هر وقت رکردی اضافه یا تغییر داده میشود، درصورتی که فیلدهای شاخص شده زیادی وجود داشته باشند، موتور بانک اطلاعاتی مجبور است بیشتر کار کند. چون هربار لازم است که شاخصها به روز شوند لذا این نوع عملیات اتفاق می افتد. اگر بیشتر دسترسی جدول روی پرس و جو صرف شود، آن کار تاثیر روی کارائی نخواهد گذاشت. به هر حال، اگر رکوردهای جدول دائما تغییر داده شوند، باید یک محدوده معقولی برای تعدادی از فیلدها که شاخص شده اند وجود داشته باشد. چه نوع شاخصی برای استفاده باید توسط انواع فرمانهای SELECT، ORDER BY و JOIN که بیشتر اوقات بکار می روند تعیین شود. به بیان دیگر، شاخصهای گوناگون فیلد به هنگام جستجو کردن درمورد فیلدهای مختلف مفیدند (همانند مثال نام خانوادگی+نام( و شاخصهای یک فیلد وقتی که یک فیلد را جستجو می کنید مفید هستند)همانند مثال شماره مشتری).



مترجم : علی اکبر حاتمی

تشکرات از این پست
دسترسی سریع به انجمن ها