ایندکس در 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
- مدیریت دادهها
- پایگاه داده