关系属性上的索引(index)是一种数据结构,它允许数据库系统高效地找到在关系中具有该属性指定值的那些元组,而不是扫描关系的所有元组。还可以在一个属性列表上创建索引。
索引对于正确性来说不是必需的,因为它们是冗余的数据结构。索引构成数据库物理模式的一部分,而不是数据库逻辑模式的一部分。
但是,索引对于事务的高效处理(既包括更新事务又包括查询事务)是很重要的。索引对于诸如主码约束和外码约束那样的完整性约束的高效实施也很重要。原则上数据库系统可自动决定创建何种索引。但是,由于索引的空间代价以及索引对更新处理的影响,要在维护何种索引上自动地做出正确选择并不容易。
因此,大多数 SQL 实现允许程序员通过数据定义语言的命令对索引的创建和删除进行控制。接下来我们将举例说明这些命令的语法。尽管我们给出的语法被很多数据库系统广泛采用和支持,但它并不是 SQL 标准的一部分。 SQL 标准并不支持对数据库物理模式的控制,将自身约束在数据库逻辑模式的层面。
我们使用 create index 命令来创建索引,它的形式为:
create index <索引名> on <关系名>(<属性列表>);
属性列表是构成索引搜索码的关系属性的列表。
当用户提交一个可以从索引的使用中获益的SQL查询时,SQL查询处理器会自动使用索引。
如果我们想要声明搜索码就是一个候选码,那么在索引定义中增加属性unique。
create unique index
如果数据库系统支持SQL标准的唯一性声明,那么这里的唯一性特性就是多余的。
我们为一个索引指定索引名在撤销索引时需要用到。drop index命令采用的形式是:
drop index<索引名>;