در این مطلب میخواهیم در مورد انواع ایندکس ها در Sql server صحبت کنیم و به طور مفصل تری انواع ایندکس را معرفی کنیم.
این ایندکس از نوع non-clustered است با این تفاوت که از چند ستون ساخته شده است. این کار زمانی انجام میشود که جستجو و کوئری گرفتن بر اساس چند ستون باشد. با این کار تعداد عملیات IO کم میشود و سرعت کوئری بالا تر خواهد رفت. زیرا که لازم نیست که برای هر ستون یک جستجو در جدول اصلی انجام شود و فقط ستونها در بخش ایندکس ها جستجو می شوند.در کد زیر نحوه ساختن این نوع ایندکس ها آورده شده است.
CREATE NONCLUSTERED INDEX IX_Production_ProductNumber_Name
ON Production.Product (Name ASC,ProductNumber ASC);
همانطور که مشاهده میشود نحوه ذخیره سازی هرکدام از ستونها در داخل ایندکس نیز مشخص شده است.
این ایندکس هم یک نوع از ایندکس های non-clustered است که میتواند چند تا از ستونهای دیگر را نیز با خود همراه کند. دقت داشته باشید که در این نوع ایندکس فقط یک ستون به عنوان کلید قرار میگیرد ولی ستون هایی که در کوئری ها کاربرد دارند نیز به عنوان include به ایندکس اضافه میشوند. این ایندکس گذاری شبیه به روش covering است با این تفاوت که sql server به بعضی از انواع داده اجازه ایندکس شدن نمیدهد که میتوان با استفاده از این روش آنها را در ایندکس گنجاند تا سرعت کوئری ها بالا تر برود. اگر بخواهیم کد بالا را به شکل include شده بنویسیم کد حاصل به شکل زیر خواهد شد.
CREATE NONCLUSTERED INDEX IX_Production_ProductNumber_Name
ON Production.Product (Name ASC) INCLUDE (ProductNumber);
دقت داشته باشید که میتوانید بیشتر از یک ستون را در include داشته باشید.
این ایندکس هم نوعی از ایندکس های non-clustered است که روی یک سری خاص از سطرهای جدول عمل ایندکس گذاری را انجام می دهد. مثالی ازکاربر این نوع ایندکس را میتوان یک جدول از محصولات یا کاربران زد. برای مثال یک جدول از کاربران وجود دارد که وقتی سیستم اقدام به حذف کاربر میکند ما کاربر را حذف نمیکنیم بلکه در داخل دیتابیس فیلد مربوط به حذف شدن آن را تغییر میدهیم. سپس در هر بار که اقدام به گرفتن لیست کاربران میکنیم همیشه شرطی را قرار میدهیم که کاربران حذف نشده را برای ما لود کند. حال میتوانیم برای اینکه کاربران حذف شده در ایندکس گذاری قرار نگیرند از این نوع ایندکس استفاده کنیم. یعنی شرطی را برای ایندکس گذاری مشخص کنیم که سطرهایی که آن شرط را ندارند ایندکس گذاری نشوند.
CREATE NONCLUSTERED INDEX IX_Not_Deleted_Users ON UserTable
(Username ASC) WHERE IsDeleted =0;
همچنین در همه نوع ایندکس گذاری از نوع non-clustered میتوان مشخص کرد که ایندکسی که در حال ساختن آن هستیم unique باشد و عضو تکراری قبول نکند.
نوع جدیدی از ایندکس ها است که بیشتر در عملیات های DataWarehouse استفاده میشود. این روش از یک فرمت ستون محور(column based) برای ذخیره سازی اطلاعات استفاده میکند که هم میتوان ستونها را به صورت clustered و هم به صورت non-clustered ذخیره نمود. این نوع ایندکس گذاری برای زمانهایی که مقدار دادههای جدول بسیار زیاد است استفاده میشود. همچنین این روش قابلیت فشردهسازی اطلاعات را نیز دارد که میتواند حجم دادهها را تا 10 برابر فشرده تر کند. ولی مشکلی که این روش دارد این است که با برخی از انواع دادهها نمیتواند کار کند. برای مثال نوع دادههایی مثل varchar(max), nvarchar(max) ,text ,ntext , image قابل استفاده در این نوع ایندکس نیستند. همچنین اگر عملیاتی مانند replication در سرور خود راه اندازی کردهاید این روش برای شما مناسب نخواهد بود و بهتر است که از همان روشهای سطر محور استفاده کنید.
CREATE CLUSTERED COLUMNSTORE INDEX CIX_TestData_TestType ON TestData.TestType
WITH (DATA_COMPRESSION = COLUMNSTORE);
این نوع از ایندکس ها رو دادههای xml ساخته میشوند. همانطور که میدانید sql server این قابلیت را دارد که بتواند ساختار دادههای xml را تفسیر کند و از داخل دادهها کوئری بگیرد. این ایندکس برای بالابردن سرعت کوئری گرفتن از دادههای xml کاربرد دارد.
CREATE PRIMARY XML INDEX PXML_TestData_TestData3 ON TestData (TestData3);
یک نوع مخصوص از ایندکس گذاری است که برای کوئری های جستجوی متنی کاربرد دارد. این نوع ایندکس بر رو ستونهای کاراکتری(رشته ای) و یا باینری عمل می کند.این نوع ایندکس با ایندکس گذاری های قبلی به کلی فرق دارد. این روش از کاتالوگ هایی برای ذخیره سازی رشتههای ساختاری میسازد که در کاتالوگ های خاص نگهداری میکند. این نوع ایندکس برای نوع دادههایی مثل varchar(max), nvarchar(max) ,text ,ntext که ستونهایی بسیار چاق را تولید میکنند و با بعضی روشها نمیتوان آنها را ایندکس گذاری کرد بسیار مناسب است. این نوع ایندکس برای جستجوی عبارات متنی و کلمه ها بسیار سریع عمل می کند. همچنین میتوان با استفاده از این ایندکس برای یک کلمه مترادف ها را نیز جستجو کرد. از معایبی که این روش دارد این است که این نوع ایندکس بر روی یک سرویس جدا اجرا میشود و اگر به درستی پیکربندی نشود میتواند حجم زیادی از منابع سیستم را آشغال کند. همچنین اگر به درستی پیکربندی نشده باشد کاتالوگ آن میتواند حجم زیادی از دیسک را نیز آشغال نماید و دیسک را مدت زیاد مشغول کند.
این نوع ایندکس ها برای نوع دادههای geometry, geography کاربرد دارد و برای ایندکس گذاری مکانی مورد استفاده قرار می گیرد.با وب سایت tosinso همراه باشید
بنیانگذار توسینسو و برنامه نویس
مهدی عادلی، بنیان گذار TOSINSO. کارشناس ارشد نرم افزار کامپیوتر از دانشگاه صنعتی امیرکبیر و #C و جاوا و اندروید کار می کنم. در زمینه های موبایل و وب و ویندوز فعالیت دارم و به طراحی نرم افزار و اصول مهندسی نرم افزار علاقه مندم.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود