索引的创建分类:

1、自动创建

    创建主键、唯一键的同时自动创建对应字段的索引

2、手动创建

    用create index、create table手动创建索引

 

手动创建索引:

在创建表的同时为主键创建索引

create table new_emp
(employee_id number(6) constraint emp_id_pk primary key using index(create index emp_id_idx on new_emp(employee_id)),
first_name varchar2(20),
last_name varchar2(25)
);

可以通过 USER_INDEXES 查看已经创建的索引信息;如果不执行主键约束名,系统会自动分配

index

select index_name,index_type,tablespace_name,table_name from USER_INDEXES where table_name='NEW_EMP';

执行结果:

INDEX_NAME     INDEX_TYPE     TABLESPACE_NAME      TABLE_NAME
------------------------ ----------------------  ------------------------------------  ----------------------
EMP_ID_IDX       NORMAL             USERS                                  NEW_EMP

可以通过 USER_CONSTRAINTS 查看已经创建的约束的信息

select OWNER,table_name,constraint_name,constraint_type,index_owner,index_name from user_constraints where owner='HR' and constraint_name like '___\_DEPT%' ESCAPE '\';

 

运用索引实例:

想快速导入一个大数据的时候,可以先禁止约束条件然后导入完之后在启动

--step 1
create table new_emp2
(employee_id number(6),
first_name varchar2(20),
last_name varchar2(25)
);
--step 2
create index emp_id_idx2 on new_emp2(employee_id);
--step 3
alter table new_emp2 add primary key(employee_id) using index emp_id_idx2;


基于函数的索引:

基于函数的索引是基于表达式的

例如:

create index upper_dept_name_idx on new_dept(UPPER(department_name));

index UPPER_DEPT_NAME_IDX 已创建。

 

SELECT index_name,index_type,table_owner,table_name FROM USER_INDEXES where table_name='NEW_DEPT';

INDEX_NAME                          INDEX_TYPE                              TABLE_OWNER               TABLE_NAME

----------------------------------------- ------------------------------------------- ----------------------------------- ---------------------
UPPER_DEPT_NAME_IDX   FUNCTION-BASED NORMAL  HR                                        NEW_DEPT

Note: 必须把QUERY_REWRITY_ENABLED这个初始化参数设置为TRUE才可以使用基于函数的索引

The Oracle Server treats indexs with columns marked DESC as function-based indexs.
The columns marked DESC are sorted in descending order.