معرفی 4 نوع Index در SQL به همراه مثال

0 نظر
پنجشنبه 26 مهر
مطالعه: 28 دقیقه
برنامه نویسی
برای بررسی دقیق موضوع ایندکس در SQL می توانید این آموزش را تا پایان دنبال کنید زیرا در این بلاگ زیر و بم Index در SQL و دلایل استفاده از ایندکس در SQL را به صورت کامل بررسی کرده و 4 مورد از پرطرفدارترین نحوه ایندکس در SQL را مورد بحث قرار خواهیم داد. پس اگر آماده یک مقاله علمی کامل و کاربردی از ایندکس کردن در SQL هستید وقت را تلف کنید تا عملکرد بهتری در مدیریت و بهینه سازی دیتابیس های خود داشته باشید.
منظور از Index در SQL چیست؟
ایندکس در SQL به معنی استفاده از تکنیک و فاکتورهای است که می تواند به عنوان ابزاری برای شناسایی سریع ردیف هایی با مقادیر ستون خاص بکار گرفته شود. همچنین با توجه به مواردی که در مزیت ها بررسی خواهد شد می توان ادعا کرد که بهره وری از ایندکس در SQL نوعی بازاریابی سریع در موتورهای جستجو می باشد که می تواند مقدار داده مرود نیاز برای بررسی در سرور را به شدت کاهش دهد.مزیت های استفاده از ایندکس در SQL
- بهبود عملکرد در Query
- کاهش مقدار داده مورد نیاز سرور
- امکان ایجاد محدودیت های منحصر بفرد در زمینه ایجاد دسته بندی ها
- دسترسی بهتر به داده ها
- افزایش سرعت عملیات اتصال از طریق مکان یابی سریع
- سرعت زیاد در مراحل Sorting و Grouping
- امکان دسترسی سریع به داده های ردیف برای دستورات SELECT
4 روش پرکاربرد Index در SQL
روش های زیادی برای ایندکس کردن در SQL وجود دارد که در ادامه محبوب ترین آن ها را همراه با مثالی برای نحوه کاربرد این ایندکس ها مطالعه خواهید نمود:1- Primary key index
Primary Key نوعی از ایندکس در SQL است که به عنوان یک فیلد و یا ترکیبی از چند فیلد در دیتابیس شما عمل خواهد کرد. این طریقه ایندکس همراه با Column های اصلی به صورت خودکار ایجاد شده و موجب می شود تا انحصاری بودن داده ا ارتقا یابد. به همین دلیل است که استفاده از ایندکس نوع Primaey Key می تواند تضمین تکراری نبود داده ها را به دنبال خود داشته باشد. از طرفی در این حالت می توانید از DBMS برای جستجو موارد خاص استفاده کرده و زمان خود را به صورت بهینه استفاده کنید تا پردازش دقیق تری را تجربه نمایید. نکته قابل توجه این است که در نهایت باید توجه کنید که در زمان ایجاد یک Relationship در Tables داخل یک Relational Database شما به صورت ضروری به یک Primary Key نیاز خواهید داشت.- مثالی برای نحوه ایجاد Primary Key Index در SQL
SQL
Create Table Employees (
Employeeid int Primary Key,
FirstName Varchar (50),
LastName Varchar (50),
Hiredate Date
));
SQL
Create Table Orders (
Orderid int,
Producttid int,
Primary Key (Orderid, Productid)
));
2- Unique key indicator
فقط یک عدد از این نوع ایندکس ها می توانند در هر جدول قرار بگیرند و ردیف ها را بر اساس مقدارهای موجود در یک یا چند نوع از ستون ها ترتیب دهند. به همین دلیل قادر هستید تا داده های مختلف در جدول را بر اساس مقادیر Column نمایه شده به صورت فیزیکی نظم دهید. از طرفی برای اهدافی مانند بازیابی بهینه داده ها، دسترسی های Sequential در زمانی که Query ها شامل اسکن محدوده یا بازیابی محدوده ای از مقادیر داده هستند تنظیم شده اند. همچنین علاوه بر موارد بالا این دسته از ایندکس ها برای بازیابی سریع رکوردهای خاص از مرتب کردن داده های فیزیکی در جدول به همراه Primary Key Column کمک می گیرند.- مثالی برای نحوه ایجاد Unique Key indicator در SQL
SQL
Create Table Employees (
Employeeid int Primary Key,
FirstName Varchar (50),
LastName Varchar (50),
Email Varchar (100) Unique
));
SQL
Insert into employees (Employeee, FirstName, LastName, Email) Values (1, 'John', 'Doe', '[email protected]');
Insert into employees (Employeee, FirstName, LastName, Email) Values (2, 'Jane', 'Doe', '[email protected]'); - This line will make an error.
SQL
Alter Table Employees
Add constraint uc_email unique (email);

3- Cluster index
برای بهبود نحوه ذخیره و بازیابی داده ها انتخاب شما می تواند Sort از نوع Cluster index باشد، زیرا با توجه به نحوه مرتب کردن و نوع ذخیره سازی ردیف های جدول بر اساس مقادیر یک یا چند ستون مشخص شده می توان دسترسی Sequential، کاهش عملیات ورودی/خروجی دیسک و افزایش سرعت Query ها را تجربه نمود. بنابراین اگر می خواهید از این دسته تجربیات ارتقا عملکرد در هنگان ایندکس کردن داخل SQL داشته باشید باید Case های Cluster index استفاده کنید. علاوه بر موارد بالا Cluster index بهترین نوع جستجو و مرتب سازی در گزارش های تراکنش یا شماره فاکتورهای متوالی می باشند.- مثالی برای نحوه ایجاد Cluster index در SQL
SQL
Create Table Employees (
Employeeid int Primary Key,
FirstName Nvarchar (50),
LastName Nvarchar (50),
Birthdate date
));
SQL
Create Clusted Index ix_lastname
On employees (LastName);
SQL
Create Clusted Index ix_Compoundexex
On employees (Lastname, Firstname);
4- Non-Clustered index
اگر می خواهید یک نوع از ایندکس ها در SQL به شما معرفی کنم که در آن به بازیابی داده ها پرداخته می شود باید بگویم که Non-Clustered index می تواند بهترین گزینه برای شما باشد. تفاوت ایندکس نوع Non-Clustered با Clustered در این است که در مدل Clustered نحوه ایندکس کردن به ترتیب فیزیکی در ردیف های داده جدول تاثیر می گذارند اما در مدل Non-Clustered ساختارهای داده ای جدا برای دسترسی بهتر ایجاد خواهند شد. بنابراین بازیابی سریع داده ها در این روش به این گونه است که عملکرد Query ها را با صدور مجوز برای Database Management System در مکان یابی ردیف های خاص بر اساس ستون ها در نظر میگیرد. همچنین Non-Clustered ورودی و خروجی دیسک ها را با توجه به عدم نیاز به اسکن کامل در دیسک ها کاهش می دهند و از Index های Multiple پشتیبانی می کند.- مثالی برای نحوه ایجاد Non-Cluster index در SQL
sql
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName NVARCHAR(50),
LastName NVARCHAR(50),
Department NVARCHAR(50)
);
در ادامه برای وارد کردن Non-Clustered index در Last Name دستور زیر مناسب ترین کار است:
sql
CREATE NONCLUSTERED INDEX IX_LastName
ON Employees (LastName);
همچنین برای ایجاد چندین ستون در این ایندکس از ذستور زیر کمک بگیرید:
sql
CREATE NONCLUSTERED INDEX IX_Name_Department
ON Employees (LastName, FirstName, Department);
اکنون پس از گذراندن این مراحل Non-Clustered indexشما بر روی ستون های LastName ،FirstName و Department ایجاد شده است.
جمع بندی اصلی ترین تفاوت های انواع ایندکس در SQL
نوع ایندکس | نحوه استفاده از ایندکس | نکات مثبت | نکات منفی |
Primary Key Index | به صورت خودکار با Primary key برای داده های منحصر بفرد اعمال می شود. | بازیابی سریع داده - تضمین یکپارچگی داده | بروز رسانی کند - ذخیره سازی اضافه |
Unique Key indicator | اعمال منحصر بفرد بودن برای ستونی که غیر بخش Primary key اصلی است. | جستجو بهتر - جلوگیری از مقادیر تکراری | عملیات Write کند - ذخیره سازی اضافه |
Cluster index | تعیین ترتیب ذخیره سازی فیزیکی در جدول | استفاده کارآمد از دیسک - بازیابی سریع داده با Query محدود | یک عدد در هر Table به دلیل Reordering - بروز رسانی کند |
Non-Cluster index | ارائه ساختاری مجزا برای ردیف ها در داده ها همراه با Pointer | اسکن سریع جدول - امکان ایجاد چندین ایندکس | ذخیره سازی اضافه - Write کند به دلیل بروز رسانی فهرست |