همه چیز در مورد Index-ایندکس در اوراکل

 

همه چیز در مورد Index-ایندکس در اوراکل

 

تفاوت index و virtual index و cluster index در Oracle
  • برای دوری از full-table scans and disk sorts بر روی جداول با دیتای زیاد از index استفاده می کنیم. و باعث سریع شدن سرعت اجرای کوئری ها می شود.
  • استفاده از Index مورد استفاده برای تمام کاربران و session ها.
  • استفاده از Virtual Indexes معمولا برای تست و تغییر استراتژی روی Indexing می باشد. و فقط در آن session که ایجاد می شود قابل استفاده می باشد.
  • استفاده از cluster index در واقع چنین اصطلاحی بصورت مستقیم توسط اوراکل پشتیبانی نمی شود. ما می توانید از اصطلاح indexed clusters که بطور معمول index ایجاد شده بر روی یک cluster table می باشد.در اوراکل “cluster” یعنی جایی که سطرهای مختلف می توانند در یک دیتابلاک مقیم می شوند و یک راهی که جداول وابسته بهم بصورت فیزیکی با هم امیخته شوند.
استفاده از [COMPUTE STATISTICS]
وقتی ما یک Index را ایجاد می کنید بصورت پیش فرض اوراکل بصورت B-tree indexes ایجاد می کند.
یک کلمه کلیدی است که به اوراکل می گوید هنگام ایجاد ایندکس یک مجموعه از آمار و آنالیز را جمع آوری کند که این آمار بیشتر توسط بهینه ساز استفاده شده وقتی که بعدا یک دستور اجرا می شود.
CREATE INDEX emp_idx ON emp (emp_id, emp_name) COMPUTE STATISTICS;
استفاده از [reverse-key]
برای افزایش سرعت در عملیات Insert مورد استفاده قرار می گیرد. مخصوصا برای حجم زیاد بارگذاری دیتا و Insert زیاد بسیار تاثیر گذار خواهد بود
همچنین هنگام استفاده از OPS, RAC and Grid باعث کاهش contention می شود.
create index reverse_idx on t2(c1) reverse;
استفاده از [NOSORT]
وقتی شما یک ایندکس را در Oracle ایجاد می کنید بصورت پیش فرض روی همان ستونی که ایجاد کرده بصورت مرتب شده ایجاد می شود که خود همین مسئله شمان زیادی را در صورت داشتن رکوردهای زیاد مصرف می کند که شما با استفاده از کلمه کلیدی می توانید جلوی اینکار را بگیرد. حال اگر فیلد شما بصورت مرتب شده می باشد از این کلمه کلیدی استفاده کنید.
استفاده از [Local/Global]
وقتی از پارتیشن بندی اوراکل استفاده می کنید. تعیین می کنید که ایندکس روی آن به چه صورت می باشد.
و Global برای رابطه های یک به چند (one-to-many) استفاده می شود و اجازه میدهد که یک ایندکس  به چندین table partition پارتیشن Map شود.
و Local برای رابطه های یک به یک one-to-one) mapping) بین ایندکس پارتیشن و table partition مورد استفاده قرار می گیرد.
CREATE INDEX year_idx
on all_fact (order_date)
LOCAL
(PARTITION name_idx1),
(PARTITION name_idx2),
(PARTITION name_idx3);
CREATE INDEX item_idx
on all_fact (item_nbr)
GLOBAL
(PARTITION city_idx1 VALUES LESS THAN (100)),
(PARTITION city_idx1 VALUES LESS THAN (200)),
(PARTITION city_idx1 VALUES LESS THAN (300));
استفاده از [DOMAIN/TEXT]
در خصوص domain index : بدین گونه می باشد که به توسعه دهنده این اجازه را میدهد که بتواند ساختار ایندکس خودش را در اوراکل ایجاد و هدف آن، پیاده سازی یکسری index type های جدیدی که بصورت استاندارد وجودندارد .خیلی از مواقع ما برای سیستم های خاص پردازش های خاصی نیاز داریم مثلا وقتی بخواهیم بر روی نوعی ازدیتاهای Special و video clip ها را استفاده کنیم.
نمونه خوب آن برای پیاده سازی text indexes می باشد که می خواهیم امکانات جستجو بر روی آیتم های که دارای متن های طولانی می باشد را فراهم کنیم.
چگونه می توانیم domain index را پیاده سازی کنیم؟
در ابتدا باید یک index type را تعریف کنیم که در واقع یک schema object می باشد که شامل همه چیزهای روتینی می باشد که برای یک ایندکس استفاده می شود و به سه قسمت کلی تقسیم می شود:
Index definition routines
Index maintenance routines
Index scan routines
یک مثال در خصوص text index:
CREATE INDEX my_docs_doc_idx ON my_docs(doc) INDEXTYPE IS CTXSYS.CONTEXT;
استفاده از [Invisible]
یکی از ویژگی های آن برای تست می باشد. بدین صورت که بهینه ساز دیگر از این ایندکس استفاده نمی کند.معمولا قبل از اینکه بخواهید آنرا کلا حذف کنید بدین صورت استفاده می کنید که تاثیر آنرا در ((Oracle Cost Based Optimizer(CBO)  بهینه ساز را متوجه بشوید.
ALTER INDEX emp_idx INVISIBLE;
ایندکس تکی و ایندکس های ترکیبی
اگر بر روی جدول خود از ایندکس تکی و ایندکس های ترکیبی استفاده کرده باشید. بصورت معمول ایندکس تکی سریعتر از ایندکس های ترکیبی scan می شوند.
اگر همه این ایندکس های بصورت ترکیبی باشد، اوراکل دو روش برای ایندکس های ترکیبی استفاده می کند اولا بصورت Index join و دوما بصورت عملکردهای data warehouse استفاده می کند. روش دوم از bitmap index استفاده می نماید که در عملیات Insert,update,delete کند می باشد .
این را بدانید که چندین ستون index B-tree سریعتر از multiple bitmap indexes می باشد.

 

ایندکس گذاری بروری Number یا Varchar
اگر شما در دنیای اوراکل این سوال را مطرح کنید که Index بروی Varchar2 بهتر است یا Index بر روی Number به شما جواب می دهند که سوال شما اشتباه می باشد.
بستگی به طراحی شما وقتی نیاز بود که فیلدی را از نوع String قرار می دهید . جایی که نیاز بود فیلد را از نوع Number قرار می دهید. حال تصمیم می گیرید که آیا Index نیاز دارد یا نه. بعد برای آن از Index استفاده می کنید.
بصورت نرمال Index بر روی integer سریعتر ولی بستگی به سایز فیلد integer و varchar2 دارد.ولی بصورت کلی نمی توان گفت کدام پیشتاز و سریعتر است.
فراتر از این مسئله، Index بر روی فیلدی با مقدار یونیک خیلی بهتر عمل می کند تا فیلدی که یونیک نمی باشد.
و در آخر برای اینکه بخواهید مزایا و معایب هر کدام را بررسی کنید باید خیلی از ویژگی ها از قبیل index-organized tables, clustered tables, partitioning و غیره را نیز مورد ارزیابی قرار دهید.
مقایسه Analyze index Vs gather_index_stats
بهتر است از Dbms_stats.gather_index_stats  به جای Analyze استفاده کنید، دلیلش در این لینک کامل با مثال شرح داده شده است.
هنگام حذف رکوردها عملکرد Dbms_stats بر روی دیتای واقعی که وجود دارد می باشد در صورتیکه Analyze بدین صورت نمی باشد.
نظر دوستان: Amir Jamiri Noor
استفاده از analyze صرفا برای chained rows ‌ و اصلاح ساختار استفاده میشه Validate Structure از نسخه ۱۰g به بعد اطلاعات مورد نیاز optimizer از خروجی اطلاعات آماری dbms_stat استفاده میشود. درواقع درتوسعه جدید optimizer اطلاعات آماری Analyze غیر قابل استفاده و deprecate شده است.
نکته ها:
  • اگر بر روی جدول خود از ایندکس تکی و ایندکس های ترکیبی استفاده کرده باشید. بصورت معمول ایندکس تکی سریعتر از ایندکس های ترکیبی scan می شوند. حال اگر همه این ایندکس های بصورت ترکیبی باشد.
  • اوراکل از دو روش استفاده می کند روش اول بصورت Index join  و روش دوم از bitmap index استفاده می نماید که در عملیات Insert,update,delete کند می باشد .
  • حال این را بدانید که چندین ستون index B-tree سریعتر از multiple bitmap indexes می باشد
  • در اوراکل CBO- Cost-Based Optimizer بصورت اتومات تشخیص می دهد که کجا و چه موقع از Index استفاده نماید. حال در بعضی اوقات در شرایط خاص می خواهید که این عمل را شما مدیریت کنید و می توانید از hint ها استفاده نمایید.
  • اگر جدول شما از ایندکس استفاده نکرد با اینکه ایندکس گذاری شده است، چیکار کنیم؟
    • ابتدا این دستور را اجرا کنید:
analyze TABLE yourtablename compute statistics FOR COLUMNS yourfieldname;
    • سپس اگر باز هنوز از ایندکس استفاده نکرد. مقدار PGA خود را تغییر دهید.

 

امیدوار هستم که مورد استفاده دوستان قرار گیرد.

 

همه چیز در مورد Index-ایندکس در اوراکل
امتیاز ۱ از ۱ رای

1 دیدگاه. همین الان خارج شوید

  • مطالب عالی بود ، مطالب tuning مخصوص در زمینه oracle apex tuning نیز می توانید مفید باشد.

    با تشکر از سایت خوبتون
    موفق باشید

    پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این قسمت نباید خالی باشد
این قسمت نباید خالی باشد
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست
Oracle APEX Capabilities (OAC)