
مقدمه : چرا شناخت ایندکسها در Oracle اهمیت دارد؟
اگر با پایگاه داده Oracle کار میکنید، مخصوصاً در پروژههایی با حجم زیاد داده، حتماً با اصطلاحاتی مانند Local Index و Global Index مواجه شدهاید.
این مفاهیم، در ساختار Partitioned Tables یا جداول پارتیشنشده، اهمیت حیاتی دارند و نقش مستقیمی در افزایش سرعت کوئریها، بهینهسازی عملکرد دیتابیس و کاهش مصرف منابع سیستم ایفا میکنند.
در این مقاله قصد داریم یک بررسی جامع از تفاوتهای Local و Global Index در Oracle ارائه دهیم. همچنین شما را با سناریوهای کاربردی و نکات فنی برای انتخاب صحیح ایندکس آشنا خواهیم کرد.
اگر می خواهید در مورد تفاوت B-Tree Index و Bitmap Index در اوراکل بیشتر آشنا بشید نوشته زیر را مطالعه کنید:
در این نوشته شما می خوانید
Local Index در Oracle چیست؟
Local Index ایندکسی است که برای هر پارتیشن جدول بهصورت مستقل ایجاد میشود.
این نوع ایندکس با ساختار پارتیشنبندی جدول کاملاً همسو است.
مزایای Local Index:
عملکرد بالا در partition pruning
سرعت بالا در ساخت و مدیریت
مقاومت در برابر عملیاتهای مدیریتی مانند DROP/TRUNCATE پارتیشن
مناسب برای کوئریهای بازهای (مثلاً جستجوی داده در یک ماه خاص)
معایب:
عملکرد پایینتر در کوئریهای گسترده که چندین پارتیشن را درگیر میکنند
عدم پشتیبانی از unique constraint سراسری
Global Index در Oracle چیست؟
Global Index یک ایندکس یکپارچه است که بدون توجه به پارتیشنبندی جدول، تمام دادهها را در سطح کل جدول ایندکس میکند.
مزایای Global Index:
مناسب برای کوئریهای cross-partition
پشتیبانی از unique constraint کلی
عملکرد بهتر در کوئریهای سنگین، joinها و گزارشگیریهای سراسری
معایب:
نیاز به Rebuild در صورت حذف یا تغییر پارتیشن
سرعت پایینتر در ساخت نسبت به Local Index
پیچیدگی در نگهداری و مانیتورینگ
جدول مقایسه Global Index و Local Index
ویژگی | Local Index | Global Index |
---|---|---|
سطح ایندکس | بر اساس هر پارتیشن | سراسری (روی کل جدول) |
پشتیبانی از uniqueness | درون هر پارتیشن | در کل جدول |
عملکرد در Partition Pruning | بسیار عالی | متوسط |
پایداری هنگام حذف پارتیشن | بدون مشکل | نیاز به Rebuild |
مناسب برای کوئریهای cross-partition | خیر | بله |
نگهداری | آسانتر | پیچیدهتر |
سرعت ساخت | سریع | کندتر |
چه زمانی از Local Index استفاده کنیم؟
وقتی کوئریها معمولاً روی یک بازه زمانی خاص یا پارتیشن خاص اجرا میشوند
وقتی نیاز به عملیات مدیریتی مکرر روی پارتیشنها دارید
برای عملکرد بالاتر در partition pruning
چه زمانی از Global Index استفاده کنیم؟
در تحلیلهای سراسری یا گزارشگیری بین چندین پارتیشن
هنگام نیاز به enforce کردن unique constraint روی کل جدول
برای بهبود عملکرد در کوئریهای join پیچیده
مثال واقعی از پیادهسازی Local و Global Index
ساخت جدول با پارتیشنبندی زمانی:
CREATE TABLE sales (
sale_id NUMBER,
sale_date DATE,
amount NUMBER
)
PARTITION BY RANGE (sale_date) (
PARTITION sales_2023_jan VALUES LESS THAN
(TO_DATE('2023-02-01', 'YYYY-MM-DD')),
PARTITION sales_2023_feb VALUES LESS THAN
(TO_DATE('2023-03-01', 'YYYY-MM-DD'))
);
ساخت Local Index:
CREATE INDEX idx_sales_local
ON sales(sale_date)
LOCAL;
ساخت Global Index:
CREATE INDEX idx_sales_global
ON sales(sale_date)
GLOBAL;
کوئری تست Partition Pruning:
SELECT * FROM sales
WHERE sale_date BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD')
AND TO_DATE('2023-01-31', 'YYYY-MM-DD');
سوالات متداول درباره تفاوت بین Local Index و Global در اوراکل
✅ Local Index فقط مربوط به یک پارتیشن خاص از جدول است و بهصورت جداگانه برای هر پارتیشن ساخته میشود.
در مقابل، Global Index ایندکسی است که کل جدول را صرفنظر از پارتیشنبندی ایندکس میکند.
این تفاوت، روی کارایی، نگهداری و نحوه اجرا شدن کوئریها تاثیر زیادی دارد.
بله، یکی از معایب مهم Global Index این است که در صورت انجام عملیاتی مثل DROP یا TRUNCATE روی پارتیشن، ایندکس ممکن است Invalid شود.
در چنین مواردی، لازم است ایندکس بهصورت دستی بازسازی (Rebuild) شود.
در حالیکه Local Indexها چنین مشکلی ندارند.
برای کوئریهایی که بازههای زمانی خاص (مثلاً یک ماه یا یک فصل) را هدف قرار میدهند، Local Index گزینه مناسبتری است.
زیرا Oracle فقط پارتیشن مرتبط را اسکن میکند (قابلیت partition pruning) و این موضوع باعث افزایش چشمگیر سرعت اجرای کوئری میشود.
بله، در Oracle هیچ محدودیتی برای استفاده همزمان از Local و Global Index وجود ندارد.
در واقع، در بسیاری از سیستمهای بزرگ، ترکیبی از هر دو نوع ایندکس برای رسیدن به بهترین عملکرد استفاده میشود؛ مثلاً Local Index برای کوئریهای ساده و Global Index برای گزارشهای پیچیده و cross-partition.
نتیجهگیری
درک تفاوت بین Local Index و Global Index در Oracle، یکی از کلیدهای موفقیت در طراحی دیتابیسهای بزرگ است.
انتخاب درست میتواند بهبود چشمگیری در سرعت کوئریها، پایداری سیستم و مصرف منابع ایجاد کند.
پیشنهاد ما:
از Local Index در سیستمهای تحلیلی زمانبندیشده استفاده کنید
از Global Index در گزارشهای کلان، عملیات join و نیاز به unique constraint سراسری بهره ببرید
💡 سوال شما درباره ایندکسهای پایگاه داده چیست؟ در بخش نظرات بپرسید!
دیدگاهتان را بنویسید