با کمک این ویژگی می توان بر روی یک ستون، انواع مختلفی از ایندکسها نظیر Bitmap، B-Tree، Reverse و … را ایجاد نمود که البته از بین این ایندکسها، صرفا یکی از انها می تواند در حالت visible قرار داشته باشد و مابقی ایندکسها، باید در حالت invisible قرار بگیرند.
برای استفاده از ایندکسهای invisible، باید مقدار پارامتر optimizer_use_invisible_indexes به true تنظیم شده باشد البته اگر این پارامتر برابر با false تنظیم شود(مقدار پیش فرض)، optimizer در زمان ایجاد plan، به ایندکسهای نامرئی توجهی نخواهد کرد.
با استفاده از این قابلیت(چند ایندکس روی یک ستون)، سوییچ وجابجایی بین انواع مختلف ایندکسها، ساده تر انجام خواهد شد.
به مثال زیر توجه کنید.
SQL> create bitmap index usef.indx1 on usef.tbl1(name) INVISIBLE;
SQL> create index usef.indx2 on usef.tbl1(name);
SQL> create index usef.indx3 on usef.tbl1(name) reverse INVISIBLE;
alter system set optimizer_use_invisible_indexes=true;
SQL> set autotrace traceonly explain statistics
select * from usef.tbl1;
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
————————————————————————————–
| 0 | SELECT STATEMENT | | 4 | 232 | 1 (0)| 00:00:01 |
| 1 | BITMAP CONVERSION TO ROWIDS | | 4 | 232 | 1 (0)| 00:00:01 |
| 2 | BITMAP INDEX FAST FULL SCAN| INDX1 | | | | |
——————————————————————————–
همانطور که در خروجی plan قابل مشاهده است، optimizer از بین سه ایندکس ایجاد شده، ایندکس indx1 را انتخاب کرده است در صورتی که این ایندکس در حالت invisible قرار دارد.
نکته: با کمک دو دستور زیر، می توان ایندکس را از حالت مرئی به نامرئی و بالعکس تغییر حالت داد:
alter index usef.indx1 invisible;
alter index usef.indx3 visible;