ایندکس‌های ترکیبی در پایگاه داده چه هستند

خلاصه
1404/09/29

ایندکس ترکیبی (Composite Index) در پایگاه داده، نوعی ایندکس است که بر روی **چندین ستون** از یک جدول ایجاد می‌شود، نه فقط یک ستون. به عبارت دیگر، ایندکس ترکیبی، مقادیر چند ستون

ایندکس‌های ترکیبی در پایگاه داده چه هستند

ایندکس ترکیبی (Composite Index) در پایگاه داده، نوعی ایندکس است که بر روی **چندین ستون** از یک جدول ایجاد می‌شود، نه فقط یک ستون. به عبارت دیگر، ایندکس ترکیبی، مقادیر چند ستون را با هم در یک ساختار داده (معمولاً یک درخت B-Tree) ذخیره می‌کند تا جستجوهای خاصی را سریع‌تر انجام دهد.

**چرا از ایندکس ترکیبی استفاده می‌کنیم؟**

* **بهینه‌سازی کوئری‌های پیچیده:** ایندکس‌های ترکیبی برای کوئری‌هایی که در شرط WHERE از چندین ستون استفاده می‌کنند، بسیار مفید هستند. به جای اینکه پایگاه داده مجبور شود از ایندکس‌های جداگانه برای هر ستون استفاده کند و سپس نتایج را با هم ادغام کند، می‌تواند مستقیماً از ایندکس ترکیبی برای یافتن رکوردهای مورد نظر استفاده کند.
* **پوشش‌دهی کوئری (Covering Index):** اگر تمام ستون‌های مورد نیاز یک کوئری (چه در شرط WHERE و چه در ستون‌هایی که SELECT می‌شوند) در ایندکس ترکیبی وجود داشته باشند، پایگاه داده می‌تواند تمام اطلاعات را از خود ایندکس استخراج کند و نیازی به دسترسی به جدول اصلی ندارد. این کار باعث افزایش چشمگیر سرعت کوئری می‌شود.
* **کاهش I/O:** با استفاده از ایندکس‌های ترکیبی مناسب، می‌توان تعداد دفعاتی که پایگاه داده باید به دیسک دسترسی پیدا کند را کاهش داد، که این امر منجر به بهبود عملکرد کلی سیستم می‌شود.

**نحوه ایجاد ایندکس ترکیبی:**

نحوه ایجاد ایندکس ترکیبی در SQL به شکل زیر است:

```sql
CREATE INDEX index_name
ON table_name (column1, column2, column3, ...);
```

به عنوان مثال:

```sql
CREATE INDEX idx_orders_customer_id_order_date
ON orders (customer_id, order_date);
```

این ایندکس ترکیبی بر روی جدول `orders` و ستون‌های `customer_id` و `order_date` ایجاد شده است.

**ترتیب ستون‌ها در ایندکس ترکیبی مهم است:**

ترتیب ستون‌ها در ایندکس ترکیبی بسیار مهم است و تأثیر زیادی بر کارایی آن دارد. به طور کلی، ستون‌هایی که بیشترین استفاده را در شرط WHERE دارند و دارای گزینه‌های انتخابی بیشتری هستند (یعنی مقادیر منحصربه‌فرد بیشتری دارند)، باید در ابتدای ایندکس قرار گیرند.

**مثال:**

فرض کنید جدولی به نام `products` داریم که دارای ستون‌های `category_id`, `brand_id`, و `price` است. اگر بیشتر کوئری‌ها بر اساس `category_id` و سپس `brand_id` فیلتر می‌شوند، یک ایندکس ترکیبی به صورت زیر منطقی خواهد بود:

```sql
CREATE INDEX idx_products_category_brand
ON products (category_id, brand_id);
```

**چه زمانی از ایندکس ترکیبی استفاده نکنیم؟**

* **اگر ستون‌های ایندکس به ندرت در کوئری‌ها استفاده شوند.**
* **اگر جدول بسیار کوچک باشد.** در جداول کوچک، سربار ایندکس ممکن است از مزایای آن بیشتر باشد.
* **اگر ستون‌ها به طور مداوم به روز شوند.** ایندکس‌ها باید به روز شوند، که این کار می‌تواند عملکرد نوشتن را کاهش دهد.

**نکات مهم:**

* قبل از ایجاد ایندکس ترکیبی، کوئری‌های خود را به دقت تجزیه و تحلیل کنید تا بفهمید کدام ستون‌ها در شرط WHERE بیشتر استفاده می‌شوند و ترتیب آنها چگونه است.
* از ایجاد ایندکس‌های زیادی خودداری کنید، زیرا این کار می‌تواند عملکرد نوشتن را کاهش دهد و فضای ذخیره‌سازی بیشتری اشغال کند.
* همواره عملکرد کوئری‌ها را پس از ایجاد ایندکس‌ها بررسی کنید تا مطمئن شوید که بهبودی حاصل شده است.
* از ابزارهای پروفایلینگ پایگاه داده برای شناسایی کوئری‌های کند و بهینه‌سازی آنها استفاده کنید.

**خلاصه:**

ایندکس‌های ترکیبی ابزاری قدرتمند برای بهبود عملکرد کوئری‌ها در پایگاه داده هستند، اما باید با دقت و بر اساس تحلیل دقیق کوئری‌ها ایجاد شوند تا بهینه باشند. ترتیب ستون‌ها در ایندکس ترکیبی و همچنین انتخاب ستون‌های مناسب برای ایندکس‌گذاری از اهمیت بالایی برخوردار است.