这可能是一个愚蠢的问题,但我想确保100%。
默认情况下,DB2表的PK是聚簇索引吗?
答案 0 :(得分:8)
发件人: DB2 docs - Clustering indexes
虽然表可以有多个索引,但只有一个索引可以是聚簇索引。如果没有为表定义集群索引,那么DB2会在表中创建第一个索引,作为对数据行进行排序时的隐式集群索引。
所以不,默认情况下,主键不是表的聚簇索引。
第一个创建的索引(唯一或不唯一)是“隐式”聚簇索引,DB2尝试按照此索引值的顺序尽可能地插入记录。
如果稍后创建另一个索引并将其标识为群集,则DB2会将其标识为群集索引,但不会重新排列表中已有的数据。这可以通过REORG实用程序完成。
答案 1 :(得分:2)
来自Publib(这假设DB2 for z / OS,版本9)
当表具有集群索引时,INSERT语句会导致DB2发生 按索引顺序尽可能插入记录 值。 您在表上定义的第一个索引是隐式提供的 作为聚类索引,除非您在何时明确指定CLUSTER 创建或更改另一个索引。例如,如果您首先定义一个 DB2 EMPNO列的唯一索引,DB2插入行 按员工识别号的顺序进入EMP表 除非您明确将另一个索引定义为聚类索引。
如果您使用的是z / OS,则可以使用以下查询查看哪个索引是表的聚簇索引(在此示例中为TEST.TABLE1
):
SELECT NAME
FROM SYSIBM.SYSINDEXES
WHERE TBCREATOR = 'TEST'
AND TBNAME = 'TABLE1'
AND CLUSTERING = 'Y'
这个适用于Linux / Unix / Windows(LUW):
SELECT *
FROM SYSCAT.INDEXES
WHERE TABSCHEMA = 'TEST'
AND TABNAME = 'TABLE1'
AND INDEXTYPE = 'CLUS'
答案 2 :(得分:0)
默认情况下,DB2不会为PK创建聚簇索引。
主键
主键是一种特殊类型的唯一键,不能包含空值。例如,DEPT表中的DEPTNO列是主键。
一个表只能有一个主键。主键是可选的,可以在CREATE TABLE或ALTER TABLE语句中定义。
主键上的唯一索引称为主索引。在CREATE TABLE语句或ALTER TABLE语句中定义主键时,如果满足下列条件之一,DB2将自动创建主索引:
DB2在新功能模式下运行,并且隐式创建表空间。 DB2在新功能模式下运行,显式创建表空间,并且架构处理器正在运行。 DB2正在转换模式下运行,并且架构处理器正在运行。 如果在ALTER TABLE语句中定义主键的列上已存在唯一索引,则当DB2在新功能模式下运行并隐式创建表空间时,此唯一索引将被指定为主索引。
见:Keys DB2