ITPub博客

首页 > 数据库 > Oracle > 索引和主键

索引和主键

原创 Oracle 作者:psufnxk2000 时间:2014-04-27 22:55:04 0 删除 编辑

索引和主键:
对于非分区索引,
  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

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25099483/viewspace-1150561/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-05-31

  • 博文量
    215
  • 访问量
    700288