0

بهینه سازی نوع داده های SQL – بخش دوم

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

بهینه سازی نوع داده های SQL – بخش دوم


شناسه بی همتا : این نوع داده از ذخیره 16 بیتی تشکیل میشود درنتیجه خیلی جاگیر است و برای ذخیره کردن اعداد دو دویی به همتای عمومی(GUIDS) استفاده میشود و معمولا به خاطر ماهیت بی نظیرش به عنوان کلید اولیه بکار می رود . بطور کلی ادقام کردن دو یا چند پایگاه داده ای که دارای شناسه های به همتا بعنوان کلیدهای اولیه می باشند در مقایسه با انواع اعداد صحیح راحتتر است . سپس برای ادغام پایگاه داده لازم است هر ردیفی تنظیم گردد.


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


بطور کلی برای سیستمهای OLTP، شما بهتر است از کاربرد شناسه های به همتا بعنوان کلیدهای اولیه اجتناب کنید.


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


اعشار: در نرم افزار SQL server2005 سرویس پکدو، شما می توانید گزینه فرمت ذخیره سازی وردسیمال(Vardecimal) را انتخاب کنید )خصوصیات پایگاه داده، گزینه، فرمت ذخیره سازی وردسیمال فعال شده است(. گزینه ور دسیمال براساس داده حقیقی که در ستون ذخیره شده است، فرمت ذخیره سازی را که برای نوع داده اعشاری لازم بوده است تغییر می دهد. شما تنها می توانید این عمل را در پایگاه داده به جریان بیندازید تا در یک جدول.


برای مشخص کردن فضایی که در یک جدول ویژه ذخیره شده است، شما می توانید دستور العمل ذخیره شده سیستمی (sp_estimated_rowsize_reduction_for_vardecimal) را اجرا کنید. برای استفاده از فرمت ور دسیمال هیچگونه تغییراتی لازم نیست که در ستون انجام شود و این فرمت هیچگونه تاثیر اساسی روی کد نخواهد گذاشت زیرا آن صرفا اصلی کاربردی است.


(n) Char(n) در مقایسه با (n) Varchar. اگر مقدار متن در طول ثابت باشد، بهتر است از Char(n) استفاده گردد. برای ذخیره کردن اطلاعات تصحیح شده، نوع داده های ورچار به یک فضای دو بایتی اضافی برای ذخیره سازی نیاز دارند بنابراین، اگر اندازه متن ثابت باشد، این فضا ازبین می رود.

(n) Varchar(n), (n) Varchar(max), Varbinary(n), Varbinary(max) (n)text, Image

وقتی که شما می خواهید مقادیر بزرگ را ذخیره کنید، خیلی مهم است که نوع داده درستی را انتخاب نمایید. این نوع داده ها براساس اندازه هایی که انتخاب شده اند، پتانسیلی دارند برای اینکه موضوعی باشند.


اگر شما انتظار دارید که متن یا اندازه داده بطور منصفانه ای کوچک شود، توصیه میشود داده را در ردیف داده ذخیره کنید، یعنی اینکه شما می خواهید از نوع داده (n) Varchar(n) یا Varbinary(n) استفاده کنید که آن را به محدوده 8k کاهش می دهد. اگر داده بطور بلقوه بزرگ است، بنا بر این باید از (n) Varchar(max) یا Varbinary(max) استفاده کنید، چون نوع داده های (n) Varchar(max) و Varbinary(max) و (n) text و Image می توانند"خارج از ردیف" ذخیره شوند.


ذخیره کردن داده بزرگ مورد نظر "خارج از ردیف" یعنی اینکه ردیف داده منظم صرفا حاوی یک اشاره گر نسبت به ردیف داده دیگر است که داده بزرگ مورد نظر را ذخیره می کند، لذا محدوده 8K را برای داده بزرگ مورد نظر حذف می کند و از اندازه های ردیف داده کوچکتری ناشی میشود.


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


اگر یک پرس و جو مورد بزرگی را نیاز دارد یا برمی گرداند، پس آن بررسی می کند یا به دنبال ردیف داده کوچکتری می گردد و برای برگرداندن داده بزرگ مورد نظر از اشاره گری در آن ردیف استفاده می کند.


شما بهتر است که از نوع داده های (n) text یا Image استفاده نکنید، و به ترتیب آنها را با (n) Varchar(max) و Varbinary(max) جایگزین نمایید.


اگر شما ترجیح می دهید که از نوع داده Varbinary(max) ، (n) Varchar(max) ، (n) text یا Image استفاده کنید، پس بهتر است که گزینه برای ذخیره کردن مقدار "خارج از ردیف" انتخاب شود.


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


چند نکته مهم را درنظر داشته باشید: همیشه کوچکترین نوع داده را انتخاب کنید، از اعداد دو دوی و اعداد صحیح همراه با جداول مراجعه استفاده کنید تا جایی که امکان دارد سعی کنید از (n) Varchar ها اجتناب کنید.


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



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

چهارشنبه 17 خرداد 1391  11:21 PM
تشکرات از این پست
دسترسی سریع به انجمن ها