هنگامی که کاربر یک کوئری را اجرا می کند تا بخشی از اطلاعات درون ردیف های یک جدول را دریافت کند، انجین دیتابیس از کجا می فهمد که کدام ردیف ها را برگرداند؟ در صورتی که در این جدول، یک سری ایندکس تعریف شده باشد، این امکان وجود دارد که sql server از این ایندکس ها برای پیدا کردن ردیف های مناسب استفاده کند. چندین نوع ایندکس وجود دارد، اما در این مقاله تنها دو نوع ایندکس زیر را مورد بررسی قرار می دهیم:
- ایندکس کلاستر(clustered index)
- ایندکس نان کلاستر(nonclustered index)
یک ایندکس از نوع کلاستر، جدول مورد نظر را ذخیره و سازمان دهی می کند.
یک ایندکس از نوع نان کلاستر، بر روی یک یا چند ستون از جدول تعریف می شود اما تنها یک ساختار جداگانه است که به جدول واقعی اشاره می کند.
هر دوی این ایندکس ها اختیاری هستند، اما در افزایش کارایی کوئری ها نقش به سزایی دارند. برای اینکه بفهمیم ایندکس ها چگونه کار می کنند، دو مثال می زنیم:
فرض کنید که یک دفترچه ی تلفن داریم. این دفترچه را می توان یک ایندکس از نوع کلاستر در نظر گرفت.
هر یک از سطرهای این دفترچه تلفن، را می توان به یک ردیف در یک جدول دیتابیس تشبیه کرد. هر جدول تنها می تواند یک کلاستر ایندکس، داشته باشد.
دلیل این موضوع این است که یک ایندکس کلاستر، درواقع همان جدول اصلی است که بر اساس یک کلید خوشه بندی(کلاستر) سازمان دهی شده است.
در نگاه اول، ممکن است فکر کنید که اگر بخواهیم یک ردیف جدید را در داخل یک جدول تزریق کنیم، باید تمامی ردیف های قرار گرفته پس از این ردیف ، در داخل دیسک جابه جا شوند. اما خوشبختانه این طور نیست.
بلکه این ردیف باید در یک برگه ی اطلاعاتی صحیح(correct data page) قرار گیرد. یک لیست اشاره گر وجود دارد که ترتیب بین صفحات را در داخل خود نگهداری می کند. بنابراین نیازی نیست که ردیف های درون دیگر صفحه ها، جابه جا شوند.
کلید اصلی(primary key) این دفرچه تلفن، شماره تلفن های آن است. معمولا از کلید اصلی، به منظور کلید خوشه بندی(clustering key) استفاده می شود اما در مثال ما صحت ندارد.
در یک دفترچه ی تلفن، کلید کلاستر(کلید خوشه بندی) یا cluster key درواقع ترکیبی از نام و نام خانوادگی است.
اگر شما نام و نام خانوادگی شخصی را بدانید، آنگاه در یک دفترچه ی تلفن چگونه شماره تلفن او را پیدا می کنید؟ راه حل بسیار ساده است؛ ابتدا به سراغ فهرست الفبایی این دفترچه می روید و حرف اول نام آن شخص را در دفترچه تلفن باز می کنید. و سپس به دنبال نام دوست خود می گردید. حالا باید به دنبال نام دوست خود بگردید، سپس شماره تلفن دوست شما در کنار نام او قرار دارد. این فرآیند کمی طولانی است بنابراین آن را کامل توضیح نمی دهیم.
تعریف: به جستجوی یک شماره در دفترچه ی تلفن، با استفاده از نام و نام خانوادگی، ایندکس کلاستر(clustered index) گفته می شود.
تعریف: به ایندکس(فهرست) که در اول یک کتاب قرار دارد، نمونه ای ایندکس نان کلاستر(nonclustered index) گفته می شود.
یک ایندکس نان کلاستر(nonclustered index) حاوی فهرست ستون ها به همراه یک اشاره گر است که به سطر حقیقی مورد نظر اشاره می کند. بعنوان مثال در یک دفترچه ی تلفن، فهرست اول این دفترچه، یک ایندکس نان کلاستر است که به شماره ی صفحات اشاره می کند.
بعنوان مثالی دیگر، سرچ کردن در گوگل یا دیگر موتورهای جستجو، یک ایندکس نان کلاستر محسوب می شود. زیرا نتایج نشان داده شده حاوی لینک هایی هستند که به صفحات وب اصلی اشاره می کنند.
نکته ای که بهتر است در مورد ایندکس های نان-کلاستر به خاطر داشته باشید، این است که ممکن است بخواهید بخش هایی از اطلاعات ضروری را از ردیف های جدول مورد نظر بازیابی کنید. مثلا هنگامی که از فهرست(ایندکس) یک کتاب استفاده می کنید، مجبور هستید تا به آن آدرس از کتاب مراجعه کنید.مثلا هنگامی که دارید در گوگل سرچ می کنید، باید بر روی لینک ها کلیک کنید تا صفحه ی اصلی را مشاهده کنید.
اگر تمام اطلاعاتی که شما نیاز دارید، در داخل ایندکس(فهرست) گنجانده شده باشند، آنگاه شما نیازی ندارید تا داده های اصلی را مشاهده کنید.
با اینکه شما تنها می توانید یک ایندکس کلاستر در هر جدول داشته باشید، اما شما می توانید بیش از 999 ایندکس نان-کلاستر، در یک جدول داشته باشید. نکته ی مهمی که باید به خاطر داشته باشید، این است که، با اینکه ایندکس ها می توانند کارایی کوئری ها را بهبود ببخشند، اما این ایندکس ها از فضای دیسک استفاده می کنند و برای نگهداری آنها باید منابع مورد نیازشان را تامین کنیم.
در صورتی که یک جدول دارای چهار ایندکس نان کلاستر باشد، آنگاه هرگاه یک عمل write کردن در جدول انجام دهیم، نیاز داریم تا برای به روز نگهداشتن ایندکس ها، چهار عمل write دیگر نیز انجام دهیم.
تعداد ایندکس های مجاز در یک جدول، با انتشار نسخه ی sql server 2008 افزایش پیدا کرد تا بتوانیم از دو ویژگی جدید زیر بهره بریم:
- ستون های اسپارس(sparse columns)
- ایندکس های فیلتر شده(filtered indexes)
برای مشاهده فیلم های آموزشی مقدماتی تا پیشرفته پایگاه داده SQLServer کلیک کنید.
READ MORE