创建索引,提高外键的参照完整性性能
定义外键时,可以通过创建与外键列匹配的索引来提高某些操作的性能。
关于本任务
对于需要进行参照完整性检查的操作, Db2 会使用可用索引来提高检查操作的性能。 对于主键,索引对于参照完整性是必需的,因此它们始终可供 Db2 使用。 但是,外键不需要索引,但您可以创建索引来提高父表操作检查的性能。
入门概念
过程
对于经常被删除的父表行,创建索引以支持参照完整性:
在外部键的列上创建索引。
Db2 可以使用索引来提高操作性能,检查DELETE语句的有效性及其对相关表可能产生的影响。 请参考以下信息,帮助您制定计划:
- 索引要符合条件,索引的前导列必须与外键的所有列完全相同且顺序一致。 索引可以包含更多列,但前导列必须与外键的定义相匹配。限制 :使用表达式的索引不能用于此目的。
- 外键也可以是主键。 在这种情况下,主索引也是外键的唯一索引,父表的每一行最多有一个从属行。 从属表可用于保存与父表描述的实体的少数几个实例相关的信息。 例如,员工表格中的“家属”可能包含仅适用于在不同国家工作的员工的信息。
- 如果外键的前n列与主键的列相同,则主键可以与外键的列共享。
例如,下面的CREATE TABLE语句为员工到项目活动表中的外键指定了约束名称REPAPA和REPAE。
CREATE TABLE DSN8C10.EMPPROJACT
(EMPNO CHAR(6) NOT NULL,
PROJNO CHAR(6) NOT NULL,
ACTNO SMALLINT NOT NULL,
CONSTRAINT REPAPA FOREIGN KEY (PROJNO, ACTNO)
REFERENCES DSN8C10.PROJACT ON DELETE RESTRICT,
CONSTRAINT REPAE FOREIGN KEY (EMPNO)
REFERENCES DSN8C10.EMP ON DELETE RESTRICT)
IN DATABASE DSN8D12A;
在示例项目活动表中,主索引(在PROJNO、ACTNO、ACSTDATE上)作为PROJNO上外键的索引。 它不能作为ACTNO上外键的索引,因为ACTNO不是索引的第一列。