2011-09-06 72 views
0

通过执行以下命令将列出在我的模式中找到的所有索引,查询不会返回任何内容 - 表示要么没有创建索引,要么可能没有足够的权限。任何表中都没有找到索引 - 是否有可能?

select * from user_indexes; 

是否有更多的方式来列出我在模式中的索引?

+0

没有索引意味着没有键,意味着它们不是关系表,意味着它可以说根本不是一个模式;) – onedaywhen

回答

5

确定这是可能的。

常见,甚至:)

这只是表示没有人创建任何索引。

如果查询没有返回任何内容,这意味着您拥有权限......并且根本没有任何索引。

下面是关于“在甲骨文管理索引”一个很好的链接(这听起来像你可能运行的Oracle):

http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/indexes.htm

+0

paulsm4,我找到了你的答案Jovial,哈哈。那么我需要非常肯定这不是由于一些权限或不是,我会检查你的链接。 –

1

由于paulsm4说,你没有任何索引架构中的。

可以使用

select * from all_indexes; 

,你会看到所有的索引+,你有权利的人。

+0

感谢buddy for all_indexes! –

0

弗罗林是正确的,USER_INDEXES是ALL_INDEXES上的一个视图,它只显示那些由你创建的视图。您可以直接查询ALL_INDEXES以确定其他人是否已在所讨论的表上创建索引,但是您可能希望为table_name添加where子句,因为它将列出实例中所有表的所有索引,并且仅列出一些列。

SELECT TABLE_NAME, INDEX_NAME FROM ALL_INDEXES WHERE TABLE_NAME='XYZ'; 

您可以限制其使用,如果有一个条款表是几个表你有兴趣

SELECT TABLE_NAME, INDEX_NAME FROM ALL_INDEXES WHERE TABLE_NAME IN ('ABC','XYZ'); 

,如果有一个前缀或后缀

你可以使用一个类似条款
SELECT TABLE_NAME, INDEX_NAME FROM ALL_INDEXES WHERE TABLE_NAME like 'XYZ%'; 

另外,如果您想查看这些索引在哪些列上,您可以从ALL_IND_COLUMNS中进行选择;

SELECT * FROM ALL_IND_COLUMNS WHERE TABLE_NAME='XYZ' 

请注意,表是否有索引与否取决于数据和使用情况。可能有一百行或更少的小查找表不需要索引,而包含数百万行但在需要时仅查询少数几行的表就需要索引。

相关问题