ایندکس ها در SQL Server
تا حالا شده به این موضوع فکر کنید که به عنوان مثال وقتی ما دنبال رکورد خاصی می گردیم انجین SQL چجوری اون رکورد و فیلد خاص رو پیدا میکنه و در مدت زمان خیلی کمی اون رکورد رو بما نشون میده؟
و یا تا حالا شده وقتی توی یه فایل PDF یا کتاب دنبال مطلب خاصی هستین به فهرست اون کتاب مراجعه میکنید و خیلی سریع به صفحه و مطلب مورد نظرتون میرسید ؟ این فهرست و همچنین چیدمان و مرتب سازی اطلاعات همان ایندکس در SQL Server می باشد .
ایندکس (Index) در SQL Server یک مفهوم مهم و اساسی است که بهبود عملکرد پرس و جوها و عملیات جستجو در جداول را فراهم میکند. ایندکس به صورت مجموعهای از ستونها و رکوردها است که به سرعت دسترسی به دادهها را افزایش میدهد و زمان اجرای پرس و جوها را به میزان قابل توجهی کاهش میدهد. با استفاده از ایندکسها، پایگاهداده میتواند به سرعت رکوردهای مورد نیاز را پیدا کرده و بازگرداند.
نکات مهم درباره ایندکس در SQL Server عبارتند از:
1. انواع ایندکس:
– ایندکسها در SQL Server به دو نوع اصلی تقسیم میشوند: ایندکسهای کلاستر (Clustered Index) و ایندکسهای غیر کلاستر (Non-Clustered Index).
– ایندکس خردهکار ترتیب فیزیکی رکوردها را بر اساس ستونهای ایندکس انجام میدهد و در واقع جدول را بر اساس این ایندکس مرتب میکند. هر جدول فقط میتواند یک ایندکس خردهکار داشته باشد.
– ایندکس غیرخردهکار جداول را به صورت مستقل از ترتیب فیزیکی مرتب میکند و یک جدول میتواند چند ایندکس غیرخردهکار داشته باشد.
2. انتخاب ستونهای مناسب:
– انتخاب ستونهای مناسب برای ایندکسها بسیار مهم است. ستونهایی که بیشتر استفاده میشوند و در جستجوها و پرسوجوها بیشترین نقش را ایفا میکنند، باید به عنوان کاندیدای ایندکسها در نظر گرفته شوند.
3. اجرای پرسوجوها:
– با استفاده از ایندکسها، زمان اجرای پرسوجوها به میزان قابل توجهی کاهش مییابد، اما با افزودن ایندکسهای زیاد میتواند باعث افت عملکرد برای عملیاتهای تغییر (افزودن، حذف و بهروزرسانی) شود. بنابراین، باید توازن مناسبی بین تعداد ایندکسها و عملکرد جدول حفظ شود.
4. بهروزرسانی ایندکسها:
– با تغییر دادهها در جدول، ایندکسها نیز باید بهروزرسانی شوند تا همواره دسترسی به دادهها به سرعت انجام شود. این بهروزرسانیها ممکن است منجر به بارگذاری اضافی در سرور شود، بنابراین بهتر است زمانبندی مناسب برای بهروزرسانی ایندکسها در نواحی کمباری از سیستم در نظر گرفته شود.
5. مدیریت ایندکسها:
– مدیریت و نظارت بر ایندکسها از اهمیت ویژهای برخوردار است. شما باید از ایندکسهای ضروری و اثربخش استفاده کنید و در صورت لزوم ایندکسهای بیاستفاده و غیرضروری را حذف کنید.
6. دستورات مرتبط با ایندکس:
– برای ایجاد و مدیریت ایندکسها، در SQL Server از دستوراتی مانند CREATE INDEX، ALTER INDEX و DROP INDEX استفاده میشود.
استفاده صحیح از ایندکسها میتواند عملکرد و پاسخدهی پایگاهداده شما را بهبود بخشد، اما باید به این نکته توجه داشته باشید که بیش از حد ایندکسها نیز ممکن است عملکرد را کاهش دهد، بنابراین ایجاد و مدیریت ایندکسها نیازمند بررسی دقیق و به
بود مداوم است.
ایندکس ها با توجه به منطقی خاص و با در نظر گرفتن فیلد عددی ، رشته ای و یا تاریخ و… به مرتب سازی داده ها می پردازد که در نهایت منجر به این می شود که بازیابی و فراخوانی اطلاعات با سرعتی چندین برابر انجام می شود ، در جدول های Heap که دیتا فقط Bulk Insert شده است پیدا کردن اطلاعات مورد نظر زمان زیادی می طلب زیرا انجین Sql Server می بایست تمامی دیتای موجود در جدول را اسکن کرده تا به دیتای مورد نظر برسد ، حال تصور کنید این جدول تعداد رکورد بسیار بالایی داشته و حجم خیلی زیادی از اطلاعات در آن باشد ، قطعا گزارشات سیستم شما که بر مبنای Select طراحی شده اند با کندی شدیدی روبرو خواهند شد ولی از طرف دیگر درج اطلاعات در جدول های Heap و بدون ایندکس به سرعت انجام می شود چرا که دیتا هر فضای خالی که توسط دیتابیس پیدا می شود درج می شود ولی در جدول مرتب سازی شده با ایندکس SQL server می بایست برای هر دیتا که مشخصه خاصی دارد جایگاه مورد نظرش را پیدا کند برای همین ادمین دیتابیس موظف است طبق برنامه یکپارچگی دیتا کنترل کرده و همچنین از پراکندگی دیتا گزارش گیری کند ، پیشنهاد مایکروسافت برای Reorganized کردن دیتا درصد Fragmentation بین 15 تا 30 و برای Rebuild کردن دیتا Fragmentation بالای 30 درصد را پیشنهاد می کند . در ادامه به نحوه گزارش گیری پراکندگی دیتا می پردازیم .
انواع ایندکس در SQL Server
Primary Key Index: این نوع از ایندکس برای تضمین یکتایی سطرهای یک جدول و همچنین بهبود عملکرد جستجو در ستون اصلی جدول استفاده میشود.
Unique Index: این نوع از ایندکس همانند Primary Key Index عمل میکند، با این تفاوت که اجازه تکراری بودن مقادیر در ستونهای ایندکس شده را نمیدهد.
Clustered Index: این نوع از ایندکس برای ستون یا ستونهای جدول استفاده میشود که براساس آنها جدول مرتب میشود. این ایندکس باعث میشود که دادهها در حافظه داخلی سریعتر قابل دسترسی باشند.
Nonclustered Index: این نوع از ایندکس برای ستونهای جدول استفاده میشود که براساس آنها جستجوی سریع انجام میشود. این ایندکس دادهها را در یک جدول مجزا از جدول اصلی ذخیره میکند و با اشاره به رکوردهای جدول اصلی، اطلاعات مورد نیاز را برمیگرداند.
Covering Index: این نوع از ایندکس شامل تمام ستونهایی است که در یک جستجو استفاده میشوند و برای بهبود عملکرد جستجوی سریع انجام شده است.
Filtered Index: این نوع از ایندکس برای ستونهای جدول استفاده میشود که تنها برخی از رکوردها به آنها احتیاج دارند. با ایجاد ایندکس فیلتر شده، تنها رکوردهای مربوط به شرط مورد نظر در ایندکس ذخیره میشوند که باعث کاهش فضای مورد استفاده و بهبود عملکرد جستو می شود .
در ادامه به بررسی بیشتر ایندکس ها می پردازیم :
primary clustered index :
Primary clustered index در SQL Server، اولین و اصلیترین ایندکس برای یک جدول است که بر اساس ستون Primary Key آن جدول ایجاد میشود. این ایندکس باعث میشود که رکوردهای جدول بر اساس مقدار Primary Key در ستونهای مربوطه مرتب شوند و به صورت دستهای در حافظه داخلی ذخیره شوند.
در واقع Primary clustered index با استفاده از ستون Primary Key، به صورت مرتب شده، دادهها را در جدول ذخیره میکند و در اینجا نوع جستجو بر اساس مقدار Primary Key بسیار سریع و بهینه میشود. بنابراین، با ایجاد Primary clustered index برای جدول، عملیات جستجوی دادهها و همچنین افزایش سرعت اجرای کوئریهایی که براساس Primary Key انجام میشوند، بهبود مییابد.
مهمترین نکته در مورد Primary clustered index این است که تنها یک Primary clustered index برای هر جدول میتوان ایجاد کرد. در صورتی که قبلاً ایندکسی برای جدول ایجاد شده باشد، میتوانید با استفاده از دستورات SQL مرتبط، آن را حذف و یک Primary clustered index جدید برای جدول ایجاد کنید.
کلاستر ایندکس یک نوع از ایندکسهایی است که بر اساس مقدار یک ستون خاص، دادههای جدول را به چندین قطعه فیزیکی (کلاستر) تقسیم میکند. به این صورت که دادههایی که در یک کلاستر هستند، در همان صفحات دیسک قرار دارند و به طور مستقیم با استفاده از ایندکس، قابل دسترسی هستند.
در SQL Server، کلاستر ایندکس به عنوان یک ایندکس اصلی برای جدول مورد استفاده قرار میگیرد و تمامی دادههای جدول بر اساس مقدار ستونهای کلیدی در کلاسترهای مختلف قرار میگیرند. این نوع از ایندکسها به دلیل سرعت بیشتری که در دسترسی به دادهها ارائه میدهند، برای جداول بزرگ با دادههای پراکنده و عملیات جستجو و انتخاب پرتکرار مناسب هستند.
برای ساخت کلاستر ایندکس در SQL Server، باید به صورت خاص در زمان ایجاد جدول، ایندکس را به عنوان کلاستر ایجاد کنید. همچنین، برای تغییر نوع یک ایندکس به کلاستر، باید ابتدا دادههای موجود در جدول را به یک جدول دیگر منتقل کنید و سپس ایندکس را با نوع کلاستر ایجاد کنید و دادهها را به جدول با کلاستر اضافه کنید.
در SQL Server، Primary Clustered Index یک نوع از ایندکسها است که به صورت پیشفرض بر روی ستون یا مجموعهای از ستونها ایجاد میشود و بر اساس آن جدول مرتب میشود. این ایندکس از سایر ایندکسها تفاوتهای مهمی دارد و نقش مهمی در طراحی پایگاهداده و بهبود عملکرد دارد.
نکات کلیدی درباره Primary Clustered Index عبارتند از:
1. تعیین ترتیب فیزیکی جدول: Primary Clustered Index بر روی ستونهای انتخاب شده ایجاد میشود و دادهها در جدول بر اساس مقادیر این ایندکس مرتب میشوند. این به معنای تعیین ترتیب فیزیکی دادهها در جدول است.
2. یکتایی و پراکندگی دادهها: Primary Clustered Index اطمینان میدهد که مقادیر در ستونهای ایندکس یکتا و بدون تکرار هستند. همچنین، دادهها به نحوی مرتب شدهاند که پراکندگی بهینهای داشته باشند.
3. هزینه بهروزرسانی: بهروزرسانی دادهها در Primary Clustered Index هزینه بالایی دارد، زیرا این برای معمولاً ایجاد تغییرات در محل اصلی دادهها و ترتیب جدول نیاز به ترتیب مجدد دادهها دارد.
4. ستونهای کلید: در SQL Server، اگر Primary Clustered Index بر روی ستون یکتایی تعریف نشود، سیستم به صورت خودکار یک شناسه (Identity) برای جدول ایجاد میکند و بر روی این ستون Primary Clustered Index ایجاد میشود.
5. انتخاب ستونهای مناسب: برای ایجاد Primary Clustered Index، باید ستونهایی را انتخاب کرد که بیشترین استفاده را در پرسوجوها دارند و یکتا باشند.
6. همراه با Primary Key: اگر در جدول Primary Key تعریف شده باشد، Primary Clustered Index بهطور پیشفرض بر روی ستونهای Primary Key ایجاد میشود. اگر Primary Key تعریف نشده باشد، میتوانید ستونهای دلخواه برای ایجاد Primary Clustered Index انتخاب کنید.
7. تاثیر بر کارایی: استفاده از Primary Clustered Index میتواند کارایی جستجوها و پرسوجوهایی که بر روی ستونهای ایندکس انجام میشوند، بهبود چشمگیری بخشد. اما باید توجه داشت که استفاده از ایندکسها نیاز به فضای حافظه و منابع پردازشی دارد.
8. بهبود تراکنشها: با استفاده از Primary Clustered Index، تراکنشهای انجام شده بر روی جدول بهبود مییابد، زیرا اجازه میدهد تا رکوردها به صورت منطقی و منظم در جدول مرتب شوند.
استفاده از Primary Clustered Index در طراحی پایگاهداده میتواند بهبود عملکرد و بهرهوری را به همراه داشته باشد، اما همچنین نیاز به بررسی دقیق نیازها و نیازمندیهای پروژه دارد تا از بهترین استراتژی استفاده شود.
unique index :
یکی از انواع ایندکسهایی که در SQL Server وجود دارد، یونیک ایندکس (Unique Index) است. در یونیک ایندکس، مقادیر ستونهایی که به عنوان کلید اصلی تعریف شدهاند، باید برای هر ردیف در جدول یکتا باشند. به عبارت دیگر، هر ردیف در جدول باید دارای مقدار منحصر به فردی باشد که با استفاده از مقادیر ستونهای کلیدی تعیین میشود.
استفاده از یونیک ایندکس در SQL Server برای حفظ دادههای یکتای جدول بسیار مفید است. این نوع از ایندکسها به عنوان ابزاری برای اطمینان از دقت دادهها و جلوگیری از ورود دادههای تکراری به جدول مورد استفاده قرار میگیرند. علاوه بر این، یونیک ایندکس میتواند در بهبود سرعت عملیات جستجو و فیلترینگ روی جداول نیز موثر باشد.
برای ایجاد یونیک ایندکس در SQL Server، میتوانید در زمان ایجاد جدول، به صورت خاص ایندکس را به عنوان یونیک تعریف کنید. همچنین، میتوانید برای یک ایندکس موجود، تنظیمات آن را به صورت یونیک تغییر دهید.
یونیک ایندکس (Unique Index) در SQL Server، یک نوع از ایندکس است که بر روی یک ستون یا چندین ستون ایجاد میشود و اطمینان میدهد که مقادیر در این ستونها یکتا و تکرار نشدنی هستند. به عبارت دیگر، با ایجاد یونیک ایندکس، اطمینان حاصل میشود که هیچ دو رکورد در جدول دارای مقادیر یکسان در ستونهای مورد نظر نیستند. این مشخصه برای جلوگیری از ورود دادههای تکراری و نامتناسب به جدول بسیار مفید است.
نکات کلیدی درباره یونیک ایندکس عبارتند از:
1. یکتا بودن مقادیر: یونیک ایندکس، اطمینان میدهد که مقادیر در ستونها یکتا هستند، به این معنی که هر مقدار در ستونهای ایندکس فقط یکبار در جدول ظاهر میشود.
2. ترتیب مرتبسازی: یونیک ایندکس ترتیب خاصی برای مرتبسازی دادهها به وجود نمیآورد، به این معنی که میتوانید به ترتیب مورد نظر خود دادهها را درون یونیک ایندکس مرتبسازی کنید.
3. تطابق با Primary Key: یونیک ایندکس میتواند برای تعریف کردن Primary Key استفاده شود. در این صورت، Primary Key به عنوان یک نوع خاص از یونیک ایندکس به عمل میآید.
4. کاربردها: یونیک ایندکس برای ایجاد اجباری بودن یک ستون (نظیر کد ملی)، ایمیل یا شناسههای یکتا استفاده میشود. همچنین میتواند برای بهبود عملکرد پرسوجوهایی که بر اساس ستونهای یونیک ایندکس انجام میشوند، استفاده شود.
5. ایجاد یونیک ایندکس:
برای ایجاد یونیک ایندکس در SQL Server، میتوانید از دستور CREATE UNIQUE INDEX استفاده کنید. مثال:
“`
CREATE UNIQUE INDEX idx_unique_column ON TableName (ColumnName);
“`
6. تفاوت با Primary Clustered Index: در صورتی که بخواهید از یونیک ایندکس استفاده کنید و همچنین Primary Key بر روی همان ستونها تعریف شده باشد، یونیک ایندکس به عنوان یک اجباری کردن برای دادهها عمل میکند. اما تفاوت مهمی وجود دارد: یونیک ایندکس به صورت مجزا از Primary Clustered Index و روی ستونهای دلخواه ایجاد میشود، در حالی که Primary Clustered Index بر روی ست
Clustered Index :
clustered index یک نوع از index است که داده ها را در دیسک به صورت فیزیکی مرتب می کند. به عبارت دیگر، هنگامی که یک clustered index بر روی یک ستون ایجاد می شود، ردیف ها بر اساس مقدار آن ستون مرتب می شوند و در همان ترتیب در دیسک ذخیره می شوند.
در یک clustered index، هر جدول می تواند دقیقاً یک clustered index داشته باشد و این به طور پیش فرض برای primary key ستون انتخاب می شود. با این حال، می توان برای ستون های دیگر نیز clustered index ایجاد کرد.
عملکرد clustered index به این صورت است که هنگامی که یک کوئری با جستجو بر روی جدول اجرا می شود، SQL Server از clustered index برای پیدا کردن ردیف های مورد نظر استفاده می کند. با توجه به اینکه ردیف ها در clustered index مرتب شده اند، جستجوی ردیف های مورد نظر با استفاده از clustered index سریعتر و بهینه تر انجام می شود.
به عنوان مثال، فرض کنید یک clustered index برای ستون تاریخ ایجاد در جدول سفارشات ایجاد شده است. هنگامی که یک کوئری با جستجو بر اساس تاریخ ایجاد سفارش اجرا می شود، SQL Server از clustered index استفاده می کند تا ردیف های مورد نظر را در ترتیب مرتب شده در دیسک پیدا کند و اجرای کوئری را بهینه کند.
ایجاد کلاستر ایندکس (clustered index) بر روی یک ستون، میتواند بهبود عملکرد جستجوی دادهها را در جدول مربوطه به ارمغان بیاورد. با ایجاد ایندکس، ردیفهای جدول در دیسک به صورت فیزیکی مرتب میشوند. بدین ترتیب هنگامی که یک جستجوی SELECT برای جستجوی یک ستون مرتبشده (به عنوان مثال، جستجو بر روی primary key) ارسال میشود، برنامه SQL Server به جای پرش به سراسر جدول، به سرعت به دنبال دادهها در ایندکس مرتبشده میرود. این باعث بهبود سرعت جستجوی دادهها میشود.
به همین دلیل، ایجاد کلاستر ایندکس بر روی ستونهایی که بیشترین فعالیت جستجوی آنها در جدول وجود دارد، میتواند در بهبود عملکرد برنامه های SQL مؤثر باشد. با این حال، باید توجه داشت که ایجاد کلاستر ایندکس بر روی ستون هایی با دادههای بزرگ و تعداد ردیفهای زیاد ممکن است به عملکرد جستجوی کوئری ها ضرر بزند و باید با دقت و با توجه به نیازهای برنامه اقدام شود. همچنین باید توجه داشت که ایجاد کلاستر ایندکس بر روی یک ستون، به هزینههای دیسکی بالایی نیز منجر میشود، بنابراین باید با توجه به حجم دادهها و منابع سرور، این اقدام انجام شود.
Clustered Index در SQL Server یک نوع از ایندکسها است که بر روی جدول ایجاد میشود و ترتیب فیزیکی رکوردها در جدول را بر اساس ستون یا ستونهای این ایندکس تعیین میکند. با ایجاد Clustered Index، رکوردها به صورت فیزیکی مرتب میشوند و دسترسی به رکوردها با استفاده از ایندکس بسیار سریعتر انجام میشود.
نکات کلیدی درباره Clustered Index عبارتند از:
1. ترتیب فیزیکی رکوردها: با ایجاد Clustered Index، رکوردها در جدول بر اساس ستونهای این ایندکس مرتب میشوند. این به معنای داشتن ترتیب فیزیکی خاصی برای رکوردها است که باعث افزایش سرعت دسترسی به دادهها میشود.
2. یکتایی: Clustered Index به صورت پیشفرض بر روی ستون یا ستونهای یکتا ایجاد میشود، به این معنا که هر مقدار در این ستونها فقط یکبار در جدول ظاهر میشود.
3. انتخاب ستونهای مناسب: برای ایجاد Clustered Index، باید ستونهایی را انتخاب کنید که در پرسوجوها بیشترین استفاده را دارند و تعداد تکرارها در آنها کمتر باشد.
4. ایجاد Clustered Index:
برای ایجاد Clustered Index در SQL Server، میتوانید از دستور CREATE CLUSTERED INDEX استفاده کنید. مثال:
“`
CREATE CLUSTERED INDEX idx_clustered_column ON TableName (ColumnName);
“`
5. تعداد Clustered Index: هر جدول در SQL Server تنها میتواند یک Clustered Index داشته باشد، زیرا این ایندکس ترتیب فیزیکی جدول را تعیین میکند و تنها یک حالت ترتیب میتواند وجود داشته باشد.
6. ارتباط با Primary Key: در صورتی که Primary Key در جدول تعریف شده باشد، Clustered Index بهطور پیشفرض بر روی ستونهای Primary Key ایجاد میشود. اگر Primary Key تعریف نشده باشد، میتوانید ستونهای دلخواه برای ایجاد Clustered Index انتخاب کنید.
استفاده از Clustered Index میتواند عملکرد و سرعت دسترسی به دادهها را بهبود بخشد، اما باید بهخصوص در انتخاب ستونهای مناسب برای ایندکس دقت کنید تا بهترین نتیجه را بدست آورید. همچنین، توجه به نیازمندیها و نیازهای پروژه نیز بسیار مهم است تا استفاده از Clustered Index به نتیجه مطلوب برسد.
Nonclustered Index در SQL Server
Nonclustered Index در SQL Server یک نوع از ایندکسها است که به صورت جداگانه از جدول ایجاد میشود و ترتیب فیزیکی رکوردها را در جدول تغییر نمیدهد. به عبارت دیگر، ایندکس Nonclustered بر روی ستونهای مشخص شده ایجاد میشود و محل ذخیرهسازی ایندکس و محل ذخیرهسازی رکوردها از هم مستقل هستند. این ویژگی باعث میشود که ایجاد ایندکس Nonclustered کمترین تأثیر بر ترتیب فیزیکی جدول داشته باشد و جدول اصلی بدون تغییر باقی بماند.
نکات کلیدی درباره Nonclustered Index عبارتند از:
1. جداگانه از جدول: ایندکس Nonclustered به صورت مجزا و جداگانه از جدول ایجاد میشود. این ایندکس اطلاعات لازم برای مکانیابی سریع رکوردها در جدول را فراهم میکند.
2. ترتیب مرتبسازی: ایندکس Nonclustered ترتیب فیزیکی رکوردها را در جدول تغییر نمیدهد و تنها اطلاعاتی برای مکانیابی رکوردها ارائه میدهد که به صورت مجزا از جدول اصلی ذخیره میشود.
3. پوشش (Covering): اگر ایندکس Nonclustered تمام ستونهای مورد نیاز یک پرسوجو را شامل کند، به عنوان Covering Index شناخته میشود و امکان استفاده از اطلاعات ایندکس بدون نیاز به دسترسی به جدول اصلی وجود دارد.
4. کاربردها: ایندکس Nonclustered برای بهبود عملکرد پرسوجوهایی که بر روی ستونهای جدول اجرا میشوند، استفاده میشود. این ایندکس میتواند سرعت پرسوجوها را بهبود بخشد.
5. ایجاد Nonclustered Index:
برای ایجاد Nonclustered Index در SQL Server، میتوانید از دستور CREATE INDEX استفاده کنید. مثال:
“`
CREATE NONCLUSTERED INDEX idx_nonclustered_column ON TableName (ColumnName);
“`
6. تعداد ایندکسها: هر جدول میتواند چندین ایندکس Nonclustered داشته باشد. ایجاد ایندکسهای Nonclustered متعدد میتواند کارایی پرسوجوها را بهبود بخشد اما به همین ترتیب نیاز به فضای حافظه بیشتری دارد.
7. توجه به کارایی: ایجاد ایندکسهای Nonclustered به همراه پوششی که نیاز دارید، میتواند کارایی پرسوجوها را بهبود بخشد، اما باید با دقت تعداد و نوع ایندکسها را بر اساس نیازها و منطق پرسوجوها انتخاب کنید.
استفاده از ایندکسهای Nonclustered میتواند عملکرد پرسوجوها را بهبود بخشد و دسترسی به دادهها را سریعتر کند، اما باید به دقت و با توجه به نیازمندیهای پروژه، ایندکسها را طراحی و ایجاد کنید.
Covering index در SQL Server
Covering Index در SQL Server یک نوع از ایندکسها است که تمام ستونهای مورد نیاز یک پرسوجو را شامل میشود. با ایجاد Covering Index، پرسوجو میتواند اطلاعات مورد نیاز خود را فقط از ایندکس بدست آورده و نیازی به دسترسی به جدول اصلی برای خواندن دادهها ندارد. این ویژگی باعث بهبود کارایی پرسوجوها و کاهش زمان اجرای آنها میشود.
نکات کلیدی درباره Covering Index عبارتند از:
1. شامل ستونهای مورد نیاز: Covering Index تمام ستونهای مورد نیاز یک پرسوجو را در خود دارد. این به معنای این است که پرسوجو میتواند از اطلاعات مورد نیاز خود را فقط با خواندن از ایندکس بدست آورده و نیازی به دسترسی به جدول اصلی برای خواندن دادهها ندارد.
2. بهبود کارایی پرسوجوها: با استفاده از Covering Index، زمان اجرای پرسوجوها به میزان قابل توجهی کاهش مییابد، زیرا دادهها بصورت کامل از ایندکسها بدست میآید و نیاز به جستجوی جدول اصلی برای مرتبسازی دادهها نیست.
3. تعداد ستونها: Covering Index ممکن است تمام ستونهای جدول را شامل نکند، بلکه فقط ستونهایی را که در پرسوجو مورد استفاده قرار میگیرند را شامل میشود.
4. کاربردها: Covering Index برای بهبود عملکرد پرسوجوهایی که نیاز به دسترسی به دادههای کمتری دارند و از تعداد کمتری ستونها استفاده میکنند، استفاده میشود.
5. ایجاد Covering Index:
برای ایجاد Covering Index در SQL Server، میتوانید از دستور CREATE INDEX با مشخص کردن تمام ستونهای مورد نیاز در قسمت INCLUDE استفاده کنید. مثال:
“`
CREATE INDEX idx_covering_column ON TableName (Column1, Column2)
INCLUDE (Column3, Column4);
“`
6. توجه به فضای حافظه: Covering Index بر روی حافظههای بزرگتری نسبت به ایندکسهای معمولی نیاز دارد، زیرا باید تمام ستونهای مورد نیاز را در خود داشته باشد. بنابراین، قبل از ایجاد Covering Index باید از مقدار فضای حافظه موجود در سیستم خود آگاه باشید.
استفاده از Covering Index میتواند بهبود عملکرد پرسوجوها را به همراه داشته باشد، اما باید به توجه به نیازمندیها و الزامات پروژه دقت کنید تا بهترین استفاده از این نوع از ایندکس را داشته باشید.
Filtered Index در SQL Server
Filtered Index در SQL Server یک نوع از ایندکسها است که فقط بر روی زیرمجموعهای از رکوردهای جدول ایجاد میشود. با ایجاد Filtered Index، تنها رکوردهایی که شرط مشخصی را برآورده میکنند، در ایندکس ذخیره میشوند و رکوردهایی که شرط را نقض میکنند، در ایندکس مشاهده نمیشوند. این ویژگی باعث کاهش حجم ایندکس و افزایش کارایی پرسوجوها میشود.
نکات کلیدی درباره Filtered Index عبارتند از:
1. حداکثر تعداد رکوردها: Filtered Index فقط بر روی زیرمجموعهای از رکوردهای جدول ایجاد میشود و تنها رکوردهایی که شرط تعیین شده را برآورده میکنند، در ایندکس ذخیره میشوند. این باعث کاهش حجم ایندکس و افزایش سرعت پرسوجوها میشود.
2. کاربردها: Filtered Index برای بهبود عملکرد پرسوجوهایی که فقط بر روی زیرمجموعهای از دادهها اجرا میشوند، استفاده میشود. به عنوان مثال، اگر بخواهید بر روی یک جدول تاریخهایی برآورده شده یا برابر یک مقدار مشخص را پرسوجو کنید، میتوانید یک Filtered Index بر روی ستون تاریخ ایجاد کنید.
3. ایجاد Filtered Index:
برای ایجاد Filtered Index در SQL Server، میتوانید از دستور CREATE INDEX با استفاده از عبارت WHERE برای تعیین شرط مورد نظر استفاده کنید. مثال:
“`
CREATE NONCLUSTERED INDEX idx_filtered_column ON TableName (ColumnName)
WHERE ColumnName IS NOT NULL;
“`
4. عدم پوشش تمام دادهها: به دلیل محدودیتهای شرط مشخص شده در Filtered Index، این ایندکس قادر به پوشش تمام دادهها نیست و تنها بر روی زیرمجموعهای از دادهها عمل میکند. بنابراین باید به دقت شرط مورد نظر را تعیین کنید تا بهترین نتیجه را بدست آورید.
استفاده از Filtered Index میتواند بهبود عملکرد پرسوجوها را به همراه داشته باشد و حجم ایندکسها را کاهش داده و فضای حافظه را بهینهسازی کند. با این حال، باید با دقت و به اندازهای که نیاز دارید، شرط مورد نظر را برای ایجاد Filtered Index تعیین کنید تا بهترین نتیجه را بهدست آورید.
دیدگاه ها 1