在 Oracle 中,索引是一种数据库对象,用于提高查询性能。通过索引,Oracle 可以更快地找到数据,尤其是在处理大量数据时。

常见的索引类型包括 B-Tree 索引、位图索引、唯一索引等。索引可以加速查询,但过多的索引可能会影响数据修改的性能,因此需要合理使用。
CREATE INDEX)USER_INDEXES、USER_IND_COLUMNS)DROP INDEX)ALTER INDEX REBUILD)ALTER INDEX UNUSABLE)CREATE [UNIQUE] INDEX 索引名ON 表名 (列名1, 列名2, ...);
UNIQUE:指定创建唯一索引,确保索引列的值是唯一的。列名:可以为一个或多个列创建索引(单列索引或组合索引)。创建单列索引
对 employees 表的 emp_name 列创建索引:
CREATE INDEX idx_emp_name ON employees(emp_name);
创建组合索引
对 employees 表的 dept_id 和 hire_date 列创建组合索引:
CREATE INDEX idx_dept_hire ON employees(dept_id, hire_date);
创建唯一索引
在 employees 表的 email 列上创建唯一索引:
CREATE UNIQUE INDEX idx_email ON employees(email);
位图索引
位图索引适用于低基数的列,例如性别、状态等:
CREATE BITMAP INDEX idx_gender ON employees(gender);
可以通过查询数据字典表来查看表上的索引信息:
查看索引信息:
SELECT index_name, table_name, uniquenessFROM user_indexesWHERE table_name = 'EMPLOYEES';
查看索引列信息:
SELECT index_name, column_nameFROM user_ind_columnsWHERE table_name = 'EMPLOYEES';
删除索引是比较常见的操作,当某个索引不再需要或者对性能产生负面影响时,可以删除它。
DROP INDEX 索引名;
删除索引 idx_emp_name:
DROP INDEX idx_emp_name;
当索引变得碎片化或需要优化时,可以通过重建索引来恢复其效率。
重建索引不会影响数据访问,但可能会消耗大量的系统资源。
ALTER INDEX 索引名 REBUILD;
重建索引 idx_emp_name:
ALTER INDEX idx_emp_name REBUILD;
还可以指定表空间、并行度等选项:
ALTER INDEX idx_emp_name REBUILD TABLESPACE users PARALLEL 4;
有时为了避免索引影响数据加载性能,可以暂时禁用索引。
ALTER INDEX 索引名 UNUSABLE;
索引不可用状态下,可以通过重建索引的方式重新启用:
ALTER INDEX 索引名 REBUILD;
创建示例:
CREATE BITMAP INDEX idx_gender ON employees(gender);
创建示例:
CREATE UNIQUE INDEX idx_email ON employees(email);
UPPER()、LOWER())时。创建示例:
CREATE INDEX idx_upper_name ON employees(UPPER(emp_name));
创建示例:
CREATE INDEX idx_reverse_emp_id ON employees(emp_id) REVERSE;
选择性
gender)不适合创建 B-Tree 索引,可能更适合位图索引。组合索引
dept_id 和 hire_date 常一起在查询条件中使用时,可以创建组合索引。避免过多的索引
适用的场景
在 Oracle 中,索引是一种提升查询性能的强大工具,但使用不当可能会对写操作带来负面影响。因此,了解如何创建、维护和删除索引,以及适当选择索引类型(如 B-Tree、位图、唯一索引等)至关重要。
通过查看索引的使用情况,及时重建索引或删除不必要的索引,能更好地管理数据库的性能。