据我所知(this page)Oracle自动为每个UNIQUE或PRIMARY KEY声明创建一个索引。这是索引在Oracle中自动创建时的完整列表吗?在哪些情况下Oracle会自动创建索引?
16
A
回答
20
我会尝试合并给定的答案并使其成为社区wiki。
所以指数是由Oracle这样的情况下自动创建:
- APC:对于主键和唯一键,除非这些指标已经存在。
- APC:用于LOB存储和XMLType。
- Gary:用于嵌套表的表格。
- Jim Hudson:物化视图。
0
是的,这是完整的列表。 Oracle自动为每个UNIQUE或PRIMARY KEY声明创建一个索引。
+0
根据[接受的答案](http://stackoverflow.com/a/2192193/521799)这不是完整的列表... – 2013-12-15 07:40:24
18
首先,Oracle在创建主键或唯一键时并不总是创建索引。如果已经有该列的索引,将用它来代替......
SQL> create table t23 (id number not null)
2/
Table created.
SQL> create index my_manual_idx on t23 (id)
2/
Index created.
SQL> select index_name from user_indexes
2 where table_name = 'T23'
3/
INDEX_NAME
------------------------------
MY_MANUAL_IDX
SQL>
...注意MY_MANUAL_IDX
不是唯一指标;没关系......
SQL> alter table t23
2 add constraint t23_pk primary key (id) using index
3/
Table altered.
SQL> select index_name from user_indexes
2 where table_name = 'T23'
3/
INDEX_NAME
------------------------------
MY_MANUAL_IDX
SQL> drop index my_manual_idx
2/
drop index my_manual_idx
*
ERROR at line 1:
ORA-02429: cannot drop index used for enforcement of unique/primary key
SQL>
有当Oracle会自动创建索引另一种情况:LOB存储....
SQL> alter table t23
2 add txt clob
3 lob (txt) store as basicfile t23_txt (tablespace users)
4/
Table altered.
SQL> select index_name from user_indexes
2 where table_name = 'T23'
3/
INDEX_NAME
------------------------------
MY_MANUAL_IDX
SYS_IL0000556081C00002$$
SQL>
编辑
数据库对待XMLType与其他LOB相同...
SQL> alter table t23
2 add xmldoc xmltype
3/
Table altered.
SQL> select index_name from user_indexes
2 where table_name = 'T23'
3/
INDEX_NAME
------------------------------
MY_MANUAL_IDX
SYS_IL0000556081C00002$$
SYS_IL0000556081C00004$$
SQL>
3
不,我们是越来越近,但这还不是一个完整的清单。
当您创建物化视图时,还会自动创建一个索引,因为Oracle在快速刷新时需要能够快速识别行。对于基于rowid的物化视图,它使用I_SNAP $ _tablename。对于主键物化视图,它使用原始PK名称,根据需要进行修改以使其唯一。
create materialized view testmv
refresh force with rowid
as select * from dual;
select index_name from user_indexes where table_name = 'TESTMV';
Index Name
--------------
I_SNAP$_TESTMV
2
而另一个,如果您创建一个嵌套表的表,你会得到一个自动创建的索引。一般来说基于对象的存储可以做到这一点,因为可以创建隐藏表。
我认为基于模式的XMLTypes也会这样做。
相关问题
- 1. 在这种情况下会创建索引帮助
- 2. CI索引方法/函数在某些情况下不会自动添加?
- 3. 下列情况下需要使用哪些索引
- 4. 在某些情况下创建它
- 5. 在哪些情况下使用定位会比浮动更好?
- 6. 在不使用kibana的情况下在kibana中创建索引
- 7. Eclipse pydev自动建议在某些情况下不起作用
- 8. 如何在以下情况下创建Oracle SQL语句?
- 9. 在elasticsearch中索引文档时创建了哪些索引
- 10. 我应该在哪些情况下引用Silverlight.js文件?
- 11. 默认情况下,payload.encoded的哪些编码在metasploit中检索?
- 12. 哪些内存管理技术在哪些情况下更好?
- 13. 在哪些情况下,C#中不会执行finally块?
- 14. 为什么Sql Server建议在已经存在的情况下创建索引?
- 15. 为什么此代码在某些情况下会引发IndexError?
- 16. 创建Oracle表索引
- 17. 为什么'git config'在某些情况下会创建多个配置项?
- 18. 如何在没有创建培训师的情况下自动化作弊引擎价值搜索/设置
- 19. 我在哪些情况下使用这些排序算法?
- 20. 在哪种情况下建议使用ActiveResource?而在这种情况下呢?
- 21. Oracle是否自动为FOREIGN KEY列创建二级索引?
- 22. 为什么Internet Explorer会在某些情况下自动调整div的style.left值?
- 23. 自动完成在某些情况下不起作用
- 24. 如何在不打破行的情况下创建表? (引导)
- 25. 在哪些情况下我们不能简单地依靠自动引用计数?
- 26. 在哪些情况下,我想创建从Linq到Sql结果的自定义业务对象?
- 27. 在没有注册的情况下创建自定义文化
- 28. 为什么Perl会在这种情况下自动生效?
- 29. 占位符检查在某些情况下有效,并且在某些情况下不会
- 30. 在没有自动登录的情况下在ios上创建Firebase用户
“LOB存储”情况可能也会导致其他复杂数据类型的索引。虽然我没有测试过这个。我期望索引由Oracle Spatial,Oracle Text等创建。 – 2010-02-03 15:18:54
它是社区wiki。如果你想添加任何东西,你可以编辑这个答案。 – 2010-02-04 08:03:13