Oracle SQL开发人员 - 索引和执行计划

时间:2016-05-23 07:32:54

标签: sql database oracle indexing

我目前正在通过“解释计划”功能在oracle sql developer中分析我的查询。我没有为我的数据定义任何索引,但是,执行计划表明我是。所以我查看了索引,并且有一些索引似乎默认创建。 那些指数是什么类型的?我尝试访问这些索引的“详细信息”选项卡,但它们并没有真正帮助。我所能理解的是,它实际上是我创建的每个表的1个索引。

Index details

1 个答案:

答案 0 :(得分:2)

可能你没有明确定义任何索引,但Oracle在你创建约束时隐式地为你做了这个;例如:

SQL> create table master_table(id_master number, description_master varchar2(100));

Table created.

SQL> select count(1)
  2  from user_indexes
  3  where table_name = 'MASTER_TABLE';

  COUNT(1)
----------
         0

SQL> alter table master_table add constraint master_pk primary key (id_master);

Table altered.

SQL> alter table master_table add constraint detail_uk unique (description_master);

Table altered.

SQL> select count(1)
  2  from user_indexes
  3  where table_name = 'MASTER_TABLE';

  COUNT(1)
----------
         2

关于列的顺序:

SQL> create table DOUBLE_PK_TABLE(id1 number, id2 number);

Table created.

SQL> alter table double_pk_table add constraint double_pk primary key (id1, id2);

Table altered.

SQL> select index_name, column_name, column_position
  2  from user_indexes
  3       inner join user_ind_columns col
  4         using(index_name, table_name)
  5  where table_name ='DOUBLE_PK_TABLE';

INDEX_NAME                     COLUMN_NAME                    COLUMN_POSITION
------------------------------ ------------------------------ ---------------
DOUBLE_PK                      ID1                                          1
DOUBLE_PK                      ID2                                          2