هرگاه جدولی با تعداد سطرهای زیادی داشته باشیم (حدودا تا 1000 مگابایت) که همچنان رشد بالایی دارد، آنگاه کوئری های روی آن مدت زمان زیادی را صرف خواهند کرد. یکی از راه های حل این مشکل پارتیشن بندی می باشد. پارتیشن بندی به عملیات ذخیره سازی جدول در بخش های مجزایی از حافظه اطلاق می گردد. این کار به متعادل کردن اندازه جدول و کارایی کوئریهای صورت گرفته کمک می کند. سرور SQL مایکروسافت، از دو نوع پارتیشن بندی افقی و عمودی یشتیبانی می کند. پارتیشن بندی را می توان قبل از ایجاد جدول و یا بر روی یک جدول موجود انجام داد.
پارتیشن بندی:
هرگاه جدولی با تعداد سطرهای زیادی داشته باشیم (حدودا تا 1000 مگابایت) که همچنان رشد بالایی دارد، آنگاه کوئری های روی آن مدت زمان زیادی را صرف خواهند کرد. یکی از راه های حل این مشکل پارتیشن بندی می باشد. پارتیشن بندی به عملیات ذخیره سازی جدول در بخش های مجزایی از حافظه اطلاق می گردد. این کار به متعادل کردن اندازه جدول و کارایی کوئریهای صورت گرفته کمک می کند. سرور SQL مایکروسافت، از دو نوع پارتیشن بندی افقی و عمودی یشتیبانی می کند. پارتیشن بندی را می توان قبل از ایجاد جدول و یا بر روی یک جدول موجود انجام داد.
(البته نباید فراموش شود که برای حل مشکل سرعت اجرای کوئری ها ابتدا باید راه هایی منجمله ایندکس گذاری را امتحان کرد.)
پارتیشن بندی افقی: (horizontal partitioning)
در این نوع پارتیشن بندی، بر اساس مقادیر خاصی از یک ستون (ستون پارتیشن بندی)، مجموعه هایی از سطرها در پارتیشن های مجزا ذخیره می گردند.
به عنوان مثال فرض کنید جدولی با ده میلیون داده داریم با ستونی با مقادیر بین 1 تا ده میلیون (مثلا ستون ID). می توانید ده پارتیشن مجزا داشته باشید که پارتیشن اول شامل سطرهای با مقدار 1 تا یک میلیون، پارتیشن دوم شامل سطرهای با مقادیر یک میلیون تا دو میلیون و الی آخر می باشند.
به عنوان مثالی دیگر جدول لاگی را فرض کنید که شامل ستونی از نوع زمان می باشد. می توان یک پارتیشن بندی افقی از این جدول بر اساس ستون زمان (به عنوان مثال ماهیانه) داشت. هر پارتیشن می تواند سطرهای متعلق به یک ماه را در خود ذخیره کند. بدین ترتیب سطرهای مربوط به هر ماه در یک پارتیشن مجزا ذخیره می گردند.
پارتیشن بندی عمودی: (vertical partitioning)
در این نوع از پارتیشن بندی، تعدادی از ستون های جدول در یک پارتیشن و تعدادی دیگر در پارتیشن دیگر ذخیره می گردند. پارتیشن بندی عمودی وقتی استفاده می گردد که بعضی ستون یک جدول بزرگ بیشتر از مابقی ستون ها مورد دسترسی قرار می گیرند. بدین ترتیب می توان ستون های پراستفاده را در یک پارتیشن و دیگر ستون ها را در دیگر پارتیشن ها ذخیره کرد.
یک مثال دیگر برای این پارتیشن بندی، پارتیشن بندی ستون های ایندکس دار و ستون های غیرایندکس دار در پارتیشن های مجزا می باشد. همچنین می توان ستون های LOB و Varcharmax را در پارتیشن های مجزا ذخیره کرد.
باید در پارتیشن بندی عمودی دقت کرد. زیرا کوئری هایی که شامل ستون هایی از هر دو پارتیشن می گردند، می توانند منجر به join شدن دوباره پارتیشن ها و کاهش کارایی گردند.
نکاتی در مورد پارتیشن بندی:
• نقش پارتیشن بندی در کارایی بدین صورت است که بهینه ساز، برای اجرای یک کوئری می تواند تنها از بخش ضروری جدول (یک یا چند پارتیشن) استفاده کند. انتخاب نوع کلید در میزان کارایی موثر است. برای کارایی بیشتر، کلید پارتیشنینگ باید در بخش where از کوئری باشد.
• چه جدولی کاندید خوبی برای پارتیشن بندی است؟ قانون خاصی برای انتخاب جداول نیازمند پارتیشن بندی وجود ندارد ولی در کل جداولی که به دلیل بزرگ بودن سایزشان، هزینه نگهداریشان بالا و عملکردشان کم تر از حد انتظار است، می توانند از پارتیشن بندی بهره مند شوند. 1) هزینه نگهداری ایندکس های روی جدول بالا است ولی در صورت پارتیشن بندی هزینه کمتر می شود. 2) کوئری ها کند عمل می کنند (مثلا حذف رکوردها) و یا دیگر کاربران را بلاک می کنند.
• تعداد گروه های فایلی مورد استفاده در پارتیشنینگ بستگی به منابع سیستم دارد. در صورتیکه چند دیسک فیزیکی داریم، بهتر است به تعداد پارتیشن ها گروه فایلی داشته باشیم و هر گروه فایلی هم روی یک دیسک مجزا باشد. اگر سیستم چند پردازنده داشته باشد، می توان از امکان موازی سازی برای کاهش زمان اجرای کوئری های بزرگ استفاده کرد. در صورتیکه تنها یک دیسک داریم می توان تمام پارتیشن ها را در یک گروه فایلی قرار داد.
• برای جداول پرکاربردی که دارای ایندکس می باشند، جداول و ایندکس ها را در گروه های فایلی متفاوت قرار دهید. بدین ترتیب خواندن ایندکس و جدول سرعت بیشتری پیدا می کند.
• برای جداول پرکاربردی که شامل ستونهای text و یا image می باشند، یک پارتیشن عمودی انجام داده و ستون های متن و image را در یک فایل گروپ مجزا قرار دهید. بدین ترتیب کوئریهایی که شامل متن و یا تصویر نمی گردند با سرعت بیشتری انجام می شوند.
• فایل های داخل گروه فایلی را در دیسک های فیزیکی مجزا قرار دهید. سرعت خواندن نوشتن بالاتر می رود.
• برای جداول پرکاربردی که شامل ستونهای text و یا image می باشند، یک پارتیشن عمودی انجام داده و ستون های متن و image را در یک فایل گروپ مجزا قرار دهید. بدین ترتیب کوئریهایی که شامل متن و یا تصویر نمی گردند با سرعت بیشتری انجام می شوند.