ساختن ایندکس در DB2
ایندکس ها (Index) یا شاخص ها، مجموعهای از اشاره گرها به رکوردهایِ جدول هستند. ساختار منطقیِ ایندکس بر روی یک جدول ساخته شده و برای آن فضای فیزیکی (موسوم به فضای ایندکسی) نیز در همان زمان ایجاد ایندکس ساخته میشود. در این مقاله با ساختن انواع ایندکس در DB2 آشنا میشویم.
ساختن Index
برای ساختن ایندکس در DB2 (یا ایندکس یکتا) به ساختار زیر توجه نمایید:
CREATE (UNIQUE) INDEX index-name
ON table-name
(
column-name 1 ASC/DESC/RANDOM,
column-name 2 ASC/DESC/RANDOM,
.
.
.
column-name n ASC/DESC/RANDOM
)
USING STOGROUP storage-group-name
PRIQTY integer-value
SECQTY integer-value
FREEPAGE 0/integer-value
PCTFREE 10/smallint-value
BUFFERPOOL bufferpool-name
CLUSTER
PARTITIONED
PARTITION BY RANGE
(
PARTITION 1 ENDING AT (value),
PARTITION 2 ENDING AT (value),
.
.
.
PARTITION n ENDING AT (value)
)
DEFINE YES/NO
DEFER YES/NO
COMPRESS YES/NO
توضیح ساختار:
بسیاری از پارامترهای ایجاد ایندکس در DB2، شبیه به فضای جدولی است و دقیقا مفاهیم شبیه به هم دارند، مانند پارامتر USING STOGROUP که مشخص کننده گروه ذخیره ساز است و در ایجاد TABLESPACE و INDEX هیچ تفاوت مفهومی ندارد. در این قسمت صرفا پارامترهای انحصاری ایندکس در DB2 را توضیح میدهیم. (برای بازبینی پارامترهای مشترک به مقاله ساختن Table Space در DB2 مراجعه نمایید).
پیشنهاد میشود مقاله “گروه ذخیره ساز در DB2” را مطالعه فرمایید.
CREATE (UNIQUE) INDEX:
برای ساختن ایندکس در DB2 از دستور CREATE INDEX استفاده میشود در صورتی که مایل باشید ایندکس، محتویات یکتا داشته باشد از دستور CREATE UNIQUE INDEX استفاده میشود. اگر ایندکس یکتا بر روی جدول بسازید در هنگام ورود داده به جدول، یکتا بودن داده بررسی میشود و در صورت یکتا نبودن داده از ورود داده به جدول جلوگیری میشود.
ON:
روبروی عبارت کلیدی ON نام جدولی که ایندکس به صورت منطقی بر روی آن قرار دارد را مینویسید. در ادامه داخل پرانتز نام یک ستون (ایندکس ساده) یا چند ستون (ایندکس ترکیبی) که مایل هستید در ایندکس مشارکت داشته باشند را مینویسید.
نکته: حتما باید ترتیب صعودی یا نزولی ستون را با به کارگرفتن عبارات کلیدی مشخص کنید.
ASC:
ترتیب صعودی – از کوچک به بزرگ مرتب میکند. این مقدار پیش فرض است.
DESC:
ترتیب نزولی – از بزرگ به کوچک مرتب میکند.
RANDOM:
DB2 تصمیم میگیرد که ترتیب نزولی یا صعودی را انتخاب کند.
نکته: مقدار پیش فرضِ پارامتر PCTFREE در تعریف ایندکس معادل ۱۰ (به معنی ۱۰%) است.
(تعریف پارامتر، معادل تعریفی است که در مقاله ساختن Table Space در DB2 توضیح دادیم).
CLUSTER:
برای تعریف ایندکس از نوع کلاستر کاربرد دارد. دقت داشته باشید در یک جدول فقط یک ایندکس کلاستر میتوانید تعریف نمایید.
برای مفهوم ایندکس کلاستر به مقاله “مفاهیم پایگاه داده DB2 – ساختار داده ای (قسمت اول)” مراجعه فرمایید
PARTITIONED و PARTITION BY RANGE:
دو پارامتری هستند که برای مشخص کردن ستونِ شاخص در جدول PBR کاربرد دارند. در صورتی¬که تعریف پارتیشن¬ها و بازههای مقدار آن¬ها را در تعریف جدول انجام داده¬اید نیازی به این تعریف ندارید. عبارات کلیدی فوق فقط زمانی¬کاربرد دارند که در تعریف جدول فراموش کرده¬اید، مقادیر و بازههای پارتیشن¬ها را معین کنید.
نکته: این دستورات فقط برای جداول PBR کاربرد دارند.
برای مطالعه بیشتر در مورد جداول PBR میتوانید به مقالات زیر مراجعه فرمایید:
ساختن Table Space در DB2
ساختن Table در DB2
DEFER:
این پارامتر بدین معنی است که در زمان ایجاد ایندکس آیا ساختار فیزیکی (فضای ایندکسی) آن را نیز بسازد یا ساختن آن را به تاخیر بیندازد.
DEFER با مقدار پیش فرض NO در نظر گرفته میشود چراکه اغلب تمایل داریم همزمان با تعریف منطقی، ساختار فیزیکی ایندکس نیز ساخته شود. در صورتی که این پارامتر با مقدار YES تنظیم گردد، حتما برای ساختن فضای فیزیکیِ ایندکس از UTILITY REBUILD INDEX باید استفاده شود. در غیر اینصورت در هنگام کار با جدول پیام “تعریف ناقص در جدول وجود دارد” را دریافت میکنید.
مثال:
بر روی جدول SEGMENTED_TABLE ستون ID را به عنوان کلید اصلی تعریف کرده بودیم. ایندکس یکتای مرتبط با کلید اصلی را به شکل صعودی و با مشخصات زیر تعریف نمایید.
– گروه ذخیره ساز TESTSG را استفاده نمایید.
– بافرپول BP13 مورد استفاده قرارگیرد.
– ایندکس کلاستر شود.
پاسخ:
CREATE UNIQUE INDEX PK_SEGTB ON SEGMENTED_TABLE (ID ASC) USING STOGROUP TESTSG BUFFERPOOL BP13 CLUSTER; |
برای مطالعه بیشتر درباره ایندکس در DB2 (به زبان انگلیسی) به منابع زیر از سایت IBM مراجعه فرمایید: