数据库索引
2020-03-14 本文已影响0人
风中小酌
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
什么时候不需要创建索引:
表很小
不经常在查询中被使用的列
更新太频繁地字段不适合创建索引
不会出现在where条件中的字段不该建立索引
创建索引
索引分为唯一性索引和非唯一性索引
唯一性索引在创建主键约束和唯一性约束时,自动创建。
非唯一性索引包括:单行索引、复合索引、函数式索引
创建单行索引
CREATE INDEX 索引名 ON 表名(字段名)
SQL> create index emp_index on employees(last_name);
Index created
创建复合索引
CREATE INDEX 索引名 ON 表名(字段名1, 字段名2, ...)
SQL> create index dep_id_name_ix on departments(department_id, department_name);
Index created
复合索引的生效机制
查询时,where子句中的顺序应和索引定义时字段顺序一致
索引定义
SQL> create index dep_id_name_ix on departments(department_id, department_name);
索引使用
SQL> select * from departments where department_id=301 and department_name='A';
创建函数索引
创建索引时使用了函数
SQL> create index emp_name_upper_ix on employees(upper(last_name));
Index created
要使索引生效,在查询时where子句中也应使用对应的函数。
SQL> select * from employees where upper(last_name)='TOMMY';
EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER HIRE_DATE JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
----------- -------------------- ------------------------- ------------------------- -------------------- ----------- ---------- ---------- -------------- ---------- -------------
2500 Tommy se@sfe.com 2007/11/1 星 IT_PROG 500078.00
查询索引
与索引相关的表有 user_indexes,user_ind_columns
删除索引
SQL> drop index EMP_NAME_UPPER_IX;
Index dropped