Below query will display redundant indexes on a table
select *
from
( select index_name,
max(decode(p, 1, c,NULL)) ||
max(decode(p, 2,', '||c,NULL)) ||
max(decode(p, 3,', '||c,NULL)) ||
max(decode(p, 4,', '||c,NULL)) ||
max(decode(p, 5,', '||c,NULL)) ||
max(decode(p, 6,', '||c,NULL)) ||
max(decode(p, 7,', '||c,NULL)) ||
max(decode(p, 8,', '||c,NULL)) ||
max(decode(p, 9,', '||c,NULL)) ||
max(decode(p,10,', '||c,NULL)) ||
max(decode(p,11,', '||c,NULL)) ||
max(decode(p,12,', '||c,NULL)) ||
max(decode(p,13,', '||c,NULL)) ||
max(decode(p,14,', '||c,NULL)) ||
max(decode(p,15,', '||c,NULL)) ||
max(decode(p,16,', '||c,NULL)) index_cols
from (select index_name, substr(column_name,1,30) c, column_position p
from user_ind_columns )
group by index_name ) A,
( select index_name,
max(decode(p, 1, c,NULL)) ||
max(decode(p, 2,', '||c,NULL)) ||
max(decode(p, 3,', '||c,NULL)) ||
max(decode(p, 4,', '||c,NULL)) ||
max(decode(p, 5,', '||c,NULL)) ||
max(decode(p, 6,', '||c,NULL)) ||
max(decode(p, 7,', '||c,NULL)) ||
max(decode(p, 8,', '||c,NULL)) ||
max(decode(p, 9,', '||c,NULL)) ||
max(decode(p,10,', '||c,NULL)) ||
max(decode(p,11,', '||c,NULL)) ||
max(decode(p,12,', '||c,NULL)) ||
max(decode(p,13,', '||c,NULL)) ||
max(decode(p,14,', '||c,NULL)) ||
max(decode(p,15,', '||c,NULL)) ||
max(decode(p,16,', '||c,NULL)) index_cols
from (select index_name, substr(column_name,1,30) c, column_position p
from user_ind_columns )
group by index_name ) B
where a.index_name <> b.index_name
and a.index_cols like b.index_cols || '%'
from
( select index_name,
max(decode(p, 1, c,NULL)) ||
max(decode(p, 2,', '||c,NULL)) ||
max(decode(p, 3,', '||c,NULL)) ||
max(decode(p, 4,', '||c,NULL)) ||
max(decode(p, 5,', '||c,NULL)) ||
max(decode(p, 6,', '||c,NULL)) ||
max(decode(p, 7,', '||c,NULL)) ||
max(decode(p, 8,', '||c,NULL)) ||
max(decode(p, 9,', '||c,NULL)) ||
max(decode(p,10,', '||c,NULL)) ||
max(decode(p,11,', '||c,NULL)) ||
max(decode(p,12,', '||c,NULL)) ||
max(decode(p,13,', '||c,NULL)) ||
max(decode(p,14,', '||c,NULL)) ||
max(decode(p,15,', '||c,NULL)) ||
max(decode(p,16,', '||c,NULL)) index_cols
from (select index_name, substr(column_name,1,30) c, column_position p
from user_ind_columns )
group by index_name ) A,
( select index_name,
max(decode(p, 1, c,NULL)) ||
max(decode(p, 2,', '||c,NULL)) ||
max(decode(p, 3,', '||c,NULL)) ||
max(decode(p, 4,', '||c,NULL)) ||
max(decode(p, 5,', '||c,NULL)) ||
max(decode(p, 6,', '||c,NULL)) ||
max(decode(p, 7,', '||c,NULL)) ||
max(decode(p, 8,', '||c,NULL)) ||
max(decode(p, 9,', '||c,NULL)) ||
max(decode(p,10,', '||c,NULL)) ||
max(decode(p,11,', '||c,NULL)) ||
max(decode(p,12,', '||c,NULL)) ||
max(decode(p,13,', '||c,NULL)) ||
max(decode(p,14,', '||c,NULL)) ||
max(decode(p,15,', '||c,NULL)) ||
max(decode(p,16,', '||c,NULL)) index_cols
from (select index_name, substr(column_name,1,30) c, column_position p
from user_ind_columns )
group by index_name ) B
where a.index_name <> b.index_name
and a.index_cols like b.index_cols || '%'