Oracle索引
本Oracle教程解释了如何在Oracle中创建,重命名和删除索引的语法和示例。
什么是Oracle中的索引?
索引是一种允许更快地检索记录的性能调整方法。 索引为出现在索引列中的每个值创建一个条目。 默认情况下,Oracle创建B树索引。
创建一个索引
语法
在Oracle / PLSQL中创建索引的语法是:
CREATE [UNIQUE] INDEX index_name
ON table_name (column1, column2, ... column_n)
[ COMPUTE STATISTICS ];
- UNIQUE - 它表示索引列中值的组合必须是唯一的。
- index_name - 要分配给索引的名称。
- table_name - 要在其中创建索引的表的名称。
- column1, column2, … column_n - 在索引中使用的列。
- COMPUTE STATISTICS - 它告诉Oracle在创建索引期间收集统计信息。 当执行SQL语句时,统计信息将被优化器用于选择“执行计划”。
示例
我们来看一个如何在Oracle / PLSQL中创建索引的例子。
例如:
CREATE INDEX supplier_idx
ON supplier (supplier_name);
在这个例子中,在supplier
表上创建了一个名为supplier_idx
的索引。 它只包含一个字段 - supplier_name
字段。
也可以创建一个具有多个字段的索引,如下例所示:
CREATE INDEX supplier_idx
ON supplier (supplier_name, city);
也可以选择在创建索引时收集统计信息,如下所示:
CREATE INDEX supplier_idx
ON supplier (supplier_name, city)
COMPUTE STATISTICS;
创建一个基于函数的索引
在Oracle中,不受限于仅在列上创建索引。 还可以创建基于函数的索引。
语法
在Oracle / PLSQL中创建基于函数的索引的语法是:
CREATE [UNIQUE] INDEX index_name
ON table_name (function1, function2, ... function_n)
[ COMPUTE STATISTICS ];
- UNIQUE - 它表示索引列中值的组合必须是唯一的。
- index_name - 要分配给索引的名称。
- table_name - 要在其中创建索引的表的名称。
- function1, function2, … function_n - 索引中使用的函数。
- COMPUTE STATISTICS - 它告诉Oracle在创建索引期间收集统计信息。 当执行SQL语句时,统计信息将被优化器用于选择“执行计划”。
示例
我们来看一个如何在Oracle / PLSQL中创建基于函数的索引的例子。
例如:
CREATE INDEX supplier_idx
ON supplier (UPPER(supplier_name));
在这个例子中,我们创建了一个基于supplier_name
字段大写的索引。
但是,要确保Oracle优化器在执行SQL语句时使用此索引,请确保UPPER(supplier_name)
不计算为NULL
值。 为了确保这一点,请在WHERE
子句中添加UPPER(supplier_name)IS NOT NULL
,如下所示:
SELECT supplier_id, supplier_name, UPPER(supplier_name)
FROM supplier
WHERE UPPER(supplier_name) IS NOT NULL
ORDER BY UPPER(supplier_name);
重命名索引
语法
在Oracle / PLSQL中重命名索引的语法是:
ALTER INDEX index_name
RENAME TO new_index_name;
- index_name - 希望重新命名的索引名称。
- new_index_name - 要分配给索引的新名称。
示例
我们来看一个如何在Oracle / PLSQL中重命名索引的例子。
例如:
ALTER INDEX supplier_idx
RENAME TO supplier_index_name;
在这个例子中,我们将名为supplier_idx
的索引重命名为supplier_index_name
。
收集关于索引的统计数据
如果第一次创建索引时,忘记收集索引的统计信息,或者您想更新统计信息,则始终可以使用ALTER INDEX
命令在以后收集统计信息。
语法
在Oracle / PLSQL中收集索引统计信息的语法是:
ALTER INDEX index_name
REBUILD COMPUTE STATISTICS;
- index_name - 收集统计数据的索引。
示例
我们来看一个如何为Oracle / PLSQL中的索引收集统计数据的例子。
例如:
ALTER INDEX supplier_idx
REBUILD COMPUTE STATISTICS;
在这个例子中,正在收集名为supplier_idx
的索引的统计信息。
删除索引
语法
在Oracle / PLSQL中删除索引的语法是:
DROP INDEX index_name;
- index_name - 要删除的索引的名称。
示例
我们来看一个如何在Oracle / PLSQL中删除索引的例子。
例如:
DROP INDEX supplier_idx;
在这个例子中,删除一个名为supplier_idx
的索引。