是否可以使用SQL * Plus查看索引内部的内容?
如果我有这样的表:
Table A
------------------------
rowid | id name
123 | 1 A
124 | 4 G
125 | 2 R
126 | 3 P
其中id
是主键,我希望索引是这样的
index on A.id
-------------
id rowid
1 123
2 125
3 126
4 124
是否有一些SQL查询用于实际查看索引的内容?
答案 0 :(得分:4)
没有简单的查询 - 您可以将表或索引块转储到跟踪文件,但是您必须识别您感兴趣的块.Dion Cho有example如何处理此块转储使用SQL,但它不适合胆小的人。
但是,你可以这样做:
select /* index_ffs (a [name of index]) */
id, rowid
from a
where id is not null
order by id, rowid;
Oracle不会编写索引条目,其中所有被索引的值都为null,因此如果id可以为空,我们需要将其过滤掉。 index_ffs提示强制Oracle满足读取索引块的查询,而不是数据块。此“解决方案”不显示将在根块或分支块中的数据,而块转储可以。
答案 1 :(得分:0)
如果您正在索引EMP_ID-则该特定列中的所有值都将被索引 作为叶子-例如B树ASC索引-在叶子部分的左侧,您应该看到MIN(indexed_value)或在右侧站点,您应该看到MAX(indexed_value)-DESC相反。 但是,如果您要查询BRANCHES / ROOT值,我无济于事-但总的来说,它并不那么重要。 解释计划:
select **min**(emp_id)
from emp
where emp_id < 100;
select **max**(emp_id)
from emp
where emp_id < 100;
并将其相互比较( CARDINALITY 1 )-它仅读取一行 来自对象IND_EMP_ID
and then explain plan for:
select **min**(employee_id), **max**(employee_id)
from employees
where employee_id < 100;
- CARDINALITY 40 -在最小值和最大值之间,仅放置了索引中的40个不同值-emp_id列中的所有值。
不要忘记,即使对于PK,您仍然可以使用B-TREE / BITMAP INDEX UNIQUE或NON-UNIQUE。