2026-03-12 20:23:15
This commit is contained in:
152
vg/index_similar.sql
Normal file
152
vg/index_similar.sql
Normal file
@@ -0,0 +1,152 @@
|
||||
@@header
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Similar Tables indexes
|
||||
* Parameters : 1 - Owner (Use % as wild card, \ as ESCAPE)
|
||||
* 2 - TableName (Use % as wild card, \ as ESCAPE)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 25-Sep-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
PROMPT *************************
|
||||
PROMPT Similar Indexes
|
||||
PROMPT *************************
|
||||
|
||||
column column_name format a30
|
||||
break on TABLE_OWNER on TABLE_NAME skip 1
|
||||
BREAK ON INDEX_NAME
|
||||
|
||||
select TABLE_OWNER, TABLE_NAME, INDEX_NAME, COLUMN_NAME, COLUMN_POSITION
|
||||
FROM ALL_IND_COLUMNS
|
||||
WHERE (TABLE_OWNER, TABLE_NAME, INDEX_NAME ) IN
|
||||
(SELECT TABLE_OWNER
|
||||
, TABLE_NAME
|
||||
, INDEX_NAME
|
||||
FROM ALL_IND_COLUMNS ind
|
||||
WHERE COLUMN_POSITION = 1
|
||||
AND TABLE_OWNER NOT IN ('SYS','SYSTEM','OUTLN','DBSNMP','XDB','WMSYS','SYSMAN')
|
||||
AND (TABLE_OWNER, TABLE_NAME, COLUMN_NAME) IN (SELECT TABLE_OWNER, TABLE_NAME, COLUMN_NAME
|
||||
FROM (SELECT TABLE_OWNER , TABLE_NAME, COLUMN_NAME,
|
||||
COUNT (*) TCOUNT
|
||||
FROM ALL_IND_COLUMNS
|
||||
WHERE COLUMN_POSITION = 1
|
||||
AND TABLE_OWNER NOT IN ('SYS','SYSTEM','OUTLN','DBSNMP','XDB','WMSYS','SYSMAN')
|
||||
GROUP BY TABLE_OWNER, TABLE_NAME, COLUMN_NAME
|
||||
HAVING COUNT (*) > 1
|
||||
)
|
||||
)
|
||||
)
|
||||
ORDER BY 1,2,3,5
|
||||
/
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
DEFINE owner="&&1"
|
||||
DEFINE table_name="&&2"
|
||||
|
||||
COLUMN _owner NEW_VALUE owner NOPRINT
|
||||
COLUMN _table_name NEW_VALUE table_name NOPRINT
|
||||
COLUMN _object_type NEW_VALUE object_type NOPRINT
|
||||
|
||||
|
||||
set term off
|
||||
SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END) "_owner"
|
||||
, CASE
|
||||
WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1)
|
||||
ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name'))
|
||||
END "_table_name"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT *************************
|
||||
PROMPT Similar Indexes
|
||||
PROMPT *************************
|
||||
|
||||
COLUMN owner HEADING "Index Owner" FORMAT a20
|
||||
COLUMN table_name HEADING "Table Name" FORMAT a40
|
||||
COLUMN index_owner HEADING "Index Owner" FORMAT a20
|
||||
COLUMN index_name HEADING "Index Name" FORMAT a40
|
||||
COLUMN index_type HEADING "Index Type" FORMAT a10
|
||||
COLUMN status HEADING "Status" FORMAT a8
|
||||
COLUMN visibility HEADING "Visible" FORMAT a10
|
||||
COLUMN uniqueness HEADING "Uniqueness" FORMAT a15
|
||||
COLUMN Columns HEADING "Index columns" FORMAT a90
|
||||
|
||||
BREAK ON TABLE_NAME
|
||||
|
||||
WITH Indexes as
|
||||
(
|
||||
SELECT /*+ */
|
||||
i.table_owner || '.' || i.table_name table_name
|
||||
, i.owner || '.' || i.index_name index_name
|
||||
, i.uniqueness
|
||||
, i.index_type
|
||||
--, i.status
|
||||
--, i.visibility
|
||||
, SUBSTR(SYS_CONNECT_BY_PATH ( ic.column_name || DECODE(ic.descend,'ASC','',' (desc) ') , ' , ' ),4) Columns
|
||||
FROM dba_indexes i
|
||||
, dba_ind_columns ic
|
||||
, dba_ind_expressions ie
|
||||
WHERE i.owner = ic.index_owner
|
||||
AND i.index_name = ic.index_name
|
||||
AND i.table_owner = ic.table_owner
|
||||
AND i.table_name = ic.table_name
|
||||
AND ic.index_owner = ie.index_owner (+)
|
||||
AND ic.index_name = ie.index_name (+)
|
||||
AND ic.table_owner = ie.table_owner (+)
|
||||
AND ic.table_name = ie.table_name (+)
|
||||
AND ic.column_position = ie.column_position (+)
|
||||
AND i.table_owner LIKE upper('&&owner') ESCAPE '\'
|
||||
AND i.table_name LIKE upper('&&table_name') ESCAPE '\'
|
||||
AND CONNECT_BY_ISLEAF = 1
|
||||
AND LEVEL = ic.column_position
|
||||
CONNECT BY ic.table_owner = PRIOR ic.table_owner
|
||||
AND ic.table_name = PRIOR ic.table_name
|
||||
AND ic.index_owner = PRIOR ic.index_owner
|
||||
AND ic.index_name = PRIOR ic.index_name
|
||||
AND ic.column_position - 1 = PRIOR ic.column_position
|
||||
START WITH ic.table_owner LIKE upper('&&owner') ESCAPE '\'
|
||||
AND ic.table_name LIKE upper('&&table_name') ESCAPE '\'
|
||||
)
|
||||
, indexes_similar as
|
||||
(
|
||||
SELECT a.*
|
||||
FROM indexes a
|
||||
WHERE EXISTS (SELECT 1 from indexes b
|
||||
WHERE b.table_name = a.table_name
|
||||
AND b.columns LIKE a.columns || '%'
|
||||
AND LENGTH(b.columns) > LENGTH(a.columns)
|
||||
)
|
||||
)
|
||||
SELECT i.*
|
||||
FROM indexes i
|
||||
, indexes_similar s
|
||||
WHERE i.table_name = s.table_name
|
||||
AND i.columns like s.columns || '%'
|
||||
ORDER BY i.table_name
|
||||
, i.index_name
|
||||
, i.uniqueness
|
||||
|
||||
;
|
||||
|
||||
UNDEFINE owner
|
||||
UNDEFINE table_name
|
||||
|
||||
|
||||
@@footer
|
||||
Reference in New Issue
Block a user