Pular para o conteúdo principal

Invisible Indexes

11G has a new feature called Invisible Indexes. An invisible index is invisible to the optimizer as default.
Using this feature we can test a new index without effecting the execution plans of the existing sql statements or we can test the effect of dropping an index without dropping it.

SQL> create table teste_ii (a number, b varchar2(10));

SQL> create index idx_invisible on teste_ii(id);

begin
for i in 1..20
loop
insert into teste_ii(a,b) values(i,'TESTE'||i);
end loop;
end;
/
commit;

SQL> select * from teste_ii where a=10;
A B
---------- ----------
10 TESTE10

SQL> explain plan for
2 select * from teste_ii where a=10;
Explained

SQL> sELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 726495292
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 10 | 2 (0
| 1 | TABLE ACCESS BY INDEX ROWID| TESTE_II | 1 | 10 | 2 (0
|* 2 | INDEX RANGE SCAN | IDX_INVISIBLE | 1 | | 1 (0
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("A"=10)

Set index to invisible:
SQL> alter index denilson.idx_invisible invisible;
Index altered

SQL> explain plan for
2 select * from teste_ii where a=10;
Explained

SQL> SELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2149228497
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 10 | 4 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| TESTE_II | 1 | 10 | 4 (0)| 00:00:01 |
------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("A"=10)


Force the optmizer to get the index in the your session:
SQL> ALTER SESSION SET OPTIMIZER_USE_INVISIBLE_INDEXES = true;
Session altered

The index still invisible.

SQL> select index_name,table_name,status,VISIBILITY from user_indexes where index_name = 'IDX_INVISIBLE';
INDEX_NAME TABLE_NAME STATUS VISIBILITY
--------------------------- ----------------------- ----------- ----------
IDX_INVISIBLE TESTE_II VALID INVISIBLE

SQL> explain plan for
2 select * from teste_ii where a=10;
Explained

SQL> SELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 726495292
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 10 | 2 (0
| 1 | TABLE ACCESS BY INDEX ROWID| TESTE_II | 1 | 10 | 2 (0
|* 2 | INDEX RANGE SCAN | IDX_INVISIBLE | 1 | | 1 (0
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("A"=10)

Comentários

Postagens mais visitadas deste blog

Recompile JSP EBS - R12.2

1. Backup $ cd $EBS_APPS_DEPLOYMENT_DIR/oacore/html/WEB-INF/classes/ $ mv _pages _pages_old 2. Stop services cd $ADMIN_SCCRIPTS_HOME ./adapcctl.sh stop ./admanagedsrvctl.sh stop oafm_server1 ./admanagedsrvctl.sh stop oacore_server1 3. Compile the jsps manually  cd $FND_TOP/patch/115/bin/ perl $FND_TOP/patch/115/bin/ojspCompile.pl --compile --flush -p             4. Checking $ cd $EBS_APPS_DEPLOYMENT_DIR/oacore/html/WEB-INF/classes/_pages $ ls -ltr  5. Start services cd $ADMIN_SCCRIPTS_HOME ./admanagedsrvctl.sh start oacore_server1 ./admanagedsrvctl.sh start oafm_server1 ./adapcctl.sh start 6. Clear your web browser cache

How to Disable WebLogic Server Diagnostic Framework (WLDF)

[weblogic@yourhost ]$ cd $MW_HOME/oracle_common/common/bin/ [weblogic@yourhost bin]$ ./wlst.sh Initializing WebLogic Scripting Tool (WLST) ... Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands wls:/offline> connect('weblogic','password','t3://host_ip:port') Connecting to t3://xx.xx.xx.xx:7001 with userid weblogic ... Successfully connected to Admin Server "AdminServer" that belongs to domain "WeblogicDomain". Warning: An insecure protocol was used to connect to the server. To ensure on-the-wire security, the SSL port or Admin port should be used instead. wls:/WeblogiDomain/serverConfig/> edit() Location changed to edit tree. This is a writable tree with DomainMBean as the root. To make changes you will need to start an edit session via startEdit(). For more help, use help('edit'). wls:/WeblogiDomain/edit/> startEdit() Starting an edit session ... Started edit session, be sure...

Oracle Data Modeler and SQL Developer: change user interface (GUI) language

Oracle Data Modeler and Oracle SQL Developer does not allow to change the user interface language in “Options” or somewhere else in the GUI. This applies to the versions: Oracle SQL Developer Data Modeler - Version All and later (18.2.0 in my case) Oracle SQL Developer - Version 3.2 and later However, it’s possible switch to other language, changing datamodeler\ide\bin\ide.conf configuration file. The following lines should be added to the file for support English: AddVMOption -Duser.language=en AddVMOption -Duser.country=US Restart application! SQL Developer and Data Modeler supports the following languages: French(fr), German(de), Italian(it), Spanish(es), Brazilian Portuguese(pt BR), Japanese(ja), Korean(ko), Simplified Chinese(zh CN), Traditional Chinese(zh TW).