ایندکس در MySQL
ایندکسها در MySQL ابزارهای مهمی هستند که به بهبود کارایی و سرعت پرسوجوهای (queries) پایگاه داده کمک میکنند. این مقاله به بررسی مفهوم ایندکس، انواع ایندکسها و نحوه ایجاد و استفاده از آنها در MySQL میپردازد.
مفهوم ایندکس
ایندکسها ساختارهای دادهای ویژهای هستند که به موتور پایگاه داده کمک میکنند تا رکوردها را به صورت سریعتر پیدا و بازیابی کند. بدون ایندکس، MySQL مجبور است تا تمام رکوردهای جدول را برای پیدا کردن اطلاعات مورد نیاز پیمایش کند که میتواند زمانبر باشد.
انواع ایندکسها در MySQL
- ایندکس اصلی (Primary Key)
- یک ایندکس منحصر به فرد که برای شناسایی منحصر به فرد هر رکورد در جدول استفاده میشود.
- به طور خودکار ایجاد میشود وقتی که یک ستون به عنوان کلید اصلی تعریف میشود.
- ایندکس منحصر به فرد (Unique Index)
- ایندکسی که تضمین میکند تمام مقادیر در یک ستون یا ترکیبی از ستونها منحصر به فرد باشند.
- ایندکس عادی (Regular Index)
- ایندکسی که برای سرعت بخشیدن به جستجوها در ستونهای خاص استفاده میشود.
- ایندکس ترکیبی (Composite Index)
- ایندکسی که شامل بیش از یک ستون است و برای بهبود عملکرد پرسوجوهایی که چندین ستون را فیلتر میکنند، استفاده میشود.
- ایندکس تمام متن (Full-Text Index)
- ایندکسی که برای جستجوی متن کامل در ستونهای نوع متن مانند
VARCHARیاTEXTاستفاده میشود.
نحوه ایجاد ایندکس در MySQL
1. ایجاد ایندکس اصلی (Primary Key)
هنگام ایجاد جدول:
CREATE TABLE useritvisit (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
phone VARCHAR(15),
city VARCHAR(50)
);اضافه کردن به جدول موجود:
ALTER TABLE useritvisit
ADD PRIMARY KEY (id);2. ایجاد ایندکس منحصر به فرد (Unique Index)
هنگام ایجاد جدول:
CREATE TABLE useritvisit (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
phone VARCHAR(15),
city VARCHAR(50)
);اضافه کردن به جدول موجود:
CREATE UNIQUE INDEX unique_email ON useritvisit (email);3. ایجاد ایندکس عادی (Regular Index)
هنگام ایجاد جدول:
CREATE TABLE useritvisit (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
phone VARCHAR(15),
city VARCHAR(50),
INDEX (name)
);اضافه کردن به جدول موجود:
CREATE INDEX idx_name ON useritvisit (name);4. ایجاد ایندکس ترکیبی (Composite Index)
هنگام ایجاد جدول:
CREATE TABLE useritvisit (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
phone VARCHAR(15),
city VARCHAR(50),
INDEX (name, city)
);اضافه کردن به جدول موجود:
CREATE INDEX idx_name_city ON useritvisit (name, city);5. ایجاد ایندکس تمام متن (Full-Text Index)
هنگام ایجاد جدول:
CREATE TABLE useritvisit (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
phone VARCHAR(15),
city VARCHAR(50),
FULLTEXT (name, email)
);اضافه کردن به جدول موجود:
CREATE FULLTEXT INDEX ft_name_email ON useritvisit (name, email);استفاده از ایندکس در پرسوجوها
با استفاده از ایندکسها میتوانید بهبود قابل توجهی در عملکرد پرسوجوهای خود مشاهده کنید. به عنوان مثال، با فرض اینکه ایندکس idx_name بر روی ستون name ایجاد شده است، پرسوجوهای زیر سریعتر اجرا میشوند:
SELECT * FROM useritvisit WHERE name = 'Ali';حذف ایندکس در MySQL
اگر دیگر به ایندکسی نیاز ندارید، میتوانید آن را حذف کنید.
حذف ایندکس عادی یا منحصر به فرد:
DROP INDEX idx_name ON useritvisit;حذف ایندکس تمام متن:
DROP INDEX ft_name_email ON useritvisit;جدولهای مثال
ایجاد جدول useritvisit
CREATE TABLE useritvisit (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
phone VARCHAR(15),
city VARCHAR(50)
);| id | name | phone | city | |
|---|---|---|---|---|
| 1 | Ali | ali@example.com | 09123456789 | Tehran |
| 2 | Mohamad | mohamad@example.com | 09234567890 | Shiraz |
| 3 | Reza | reza@example.com | 09345678901 | Isfahan |
| 4 | Mahya | mahya@example.com | 09456789012 | Eslamabad |
| 5 | Mehrdad | mehrdad@example.com | 09567890123 | Kermanshah |
اضافه کردن ایندکسها به جدول useritvisit
ایندکس منحصر به فرد روی ستون email
CREATE UNIQUE INDEX unique_email ON useritvisit (email);ایندکس عادی روی ستون name
CREATE INDEX idx_name ON useritvisit (name);ایندکس ترکیبی روی ستونهای name و city
CREATE INDEX idx_name_city ON useritvisit (name, city);ایندکس تمام متن روی ستونهای name و email
CREATE FULLTEXT INDEX ft_name_email ON useritvisit (name, email);نتیجهگیری
ایندکسها ابزارهای قدرتمندی هستند که به بهبود عملکرد پرسوجوها در پایگاه داده MySQL کمک میکنند. با انتخاب صحیح نوع ایندکس و استفاده بهینه از آن، میتوانید کارایی پایگاه داده خود را بهبود بخشید و زمان پاسخدهی را کاهش دهید.
منابع
- MySQL Documentation
- MySQL Tutorial
- W3Schools SQL Tutorial
کلیدواژهها
- MySQL
- ایندکس
- Primary Key
- Unique Index
- Composite Index
- Full-Text Index
- مدیریت دادهها
- پایگاه داده






