索引和主键

索引和主键:
对于非分区索引,
  1 单列索引时,可以直接在索引列上强制主键而不会建立索引
  2 组合索引时,可以在前缀列上直接加强制主键不会建立索引, 而对于非前缀列,会加额外的索引
对于分区索引:
  分区列必须是主键索引列的子集,才能使用已有索引。 如果不是的话,会新建索引
SQL> conn song/song
Connected.
SQL> drop table test purge;

Table dropped.

SQL> create table test as select * from dba_users;

Table created.


SQL> create index idx_test on test(username);

Index created.

 

SQL> select index_name from user_indexes where table_name='TEST'


INDEX_NAME
------------------------------------------------------------
IDX_TEST

SQL> alter table test add primary key (username);

Table altered.

SQL> select index_name from user_indexes where table_name='TEST';

INDEX_NAME
------------------------------------------------------------
IDX_TEST

SQL> drop table test purge;

Table dropped.

SQL> create table test as select * from dba_users;

Table created.


SQL> create index idx_test on test (username,user_id)


Index created.

SQL> alter table test add primary key (username);

Table altered.

SQL> select index_name from user_indexes where table_name='TEST';

INDEX_NAME
------------------------------------------------------------
IDX_TEST

SQL> alter table test drop primary key;

Table altered.

SQL> alter table test add primary key (user_id);

Table altered.

SQL> select index_name from user_indexes where table_name='TEST';

INDEX_NAME
------------------------------------------------------------
SYS_C007589
IDX_TEST

SQL> select COLUMN_NAME from dba_ind_columns where index_name='SYS_C007589';

COLUMN_NAME
--------------------------------------------------------------------------------
USER_ID


2 关于分区索引的:
SQL> create table test as select * from dba_users;

Table created.


SQL> create index idx_test_part on test (user_id,username,LOCK_DATE)
  2    global  partition by range (user_id)
  3      (partition p1 values less than (10),
  4      partition p2 values less than (20),
  5      partition p_max values less than (maxvalue));

Index created.

SQL>
SQL>
SQL> select index_name from dba_indexes where table_name='TEST';

INDEX_NAME
------------------------------------------------------------
IDX_TEST_PART

SQL> ALTER TABLE TEST ADD PRIMARY KEY (USER_ID);

Table altered.

SQL> select index_name from user_indexes where table_name='TEST';

INDEX_NAME
------------------------------------------------------------
IDX_TEST_PART

SQL> alter table test drop primary key ;

Table altered.

SQL> ALTER TABLE TEST ADD PRIMARY KEY (USER_ID,username);

Table altered.

SQL> select index_name from user_indexes where table_name='TEST';

INDEX_NAME
------------------------------------------------------------
IDX_TEST_PART

SQL> alter table test drop primary key ;

Table altered.

SQL> ALTER TABLE TEST ADD PRIMARY KEY (username);

Table altered.

SQL> select index_name from user_indexes where table_name='TEST';

INDEX_NAME
------------------------------------------------------------
SYS_C007600
IDX_TEST_PART

请使用浏览器的分享功能分享到微信等