1.1 创建普通表
如果要在所属模式中创建新表,需要有 CREATE TABLE 数据库权限;而要在其他用户的模式中创建新表,则需要有 CREATE ANY TABLE 数据库权限。创建表时,应当为表指定一个表空间,否则,表将在 MAIN 创建。
创建表之后,可以使用 INSERT 命令插入数据或使用达梦数据导入导出工具装载数据,还可以直接使用 CREATE TABLE AS SELECT 创建一个表。
1.2 指定表的聚集索引
表(列存储表和堆表除外)都是使用 B 树(以下简称 B 树)索引结构管理的,每一个普通表都有一个聚集索引,数据通过聚集索引键排序,根据聚集索引键可以快速查询任何记录。
当建表语句未指定聚集索引键,DM 的默认聚集索引键是 ROWID,即记录默认以 ROWID 在页面中排序。ROWID 是 B 树为记录生成的逻辑递增序号,表上不同记录的 ROWID 是不一样的,并且最新插入的记录 ROWID 最大。很多情况下,以 ROWID 建的默认聚集索引并不能提高查询速度,因为实际情况下很少人根据 ROWID 来查找数据。
因此,DM 提供三种方式供用户指定聚集索引键:
- CLUSTER PRIMARY KEY:指定列为聚集索引键,并同时指定为主键,称为聚集主键;
- CLUSTER KEY:指定列为聚集索引键,但是是非唯一的;
- CLUSTER UNIQUE KEY:指定列为聚集索引键,并且是唯一的。
指定聚集索引键后,如果查询条件中含有聚集索引键,可以定位记录在 B 树上的位置,使查询性能大大提高。然而,插入记录也需要根据聚集索引键定位插入位置,有可能导致页面的分裂而影响插入性能。
在 dm.ini 配置文件中,可以通过指定 PK_WITH_CLUSTER 使表中的主键自动转化为聚集主键。默认情况下,PK_WITH_CLUSTER 为 0,即建表时指定的主键不会自动转化为聚集主键;若为 1,则主键自动变为聚集主键。PK_WITH_CLUSTER 对水平分区表、列存储表和堆表无效。
1.3 指定表的填充因子
上文提到,每个普通表都含有一个聚集索引,指定表的填充因子,即指定聚集索引的填充因子。索引的填充因子指在新建和重组索引时,页面记录存储空间占页面总大小的百分比。而这部分预留空间是为更新字段时使用的,一个有效的填充因子可以大大减少由更新记录导致的页面拆分。
例如,上述的创建 employee 表语句中的 STORAGE 子句,指定了 FILLFACTOR 为 80,即填充因子为 80%。
当填充因子取值低,则需要更多的页来存储数据,因而读取范围大,会影响性能。而当填充因子取值高,则在更新数据时可能造成大量的页拆分,页拆分需要消耗较多 CPU 和 I/O 资源,同样会影响性能。原则上,在只读表上应该设置填充因子高,而有大量更新的表上应该设置较低的值。默认情况下,DM 新建的表和索引的填充因子是 100,可根据实际情况设置合适的填充因子大小。
1.4 查询建表
为了创建一个与已有表相同的新表,或者为了创建一个只包含另一个表的一些行和列的新表,可以使用 CREATE TABLE AS SELECT(CTAS)命令。使用该命令,可以通过使用 WHERE 条件将已有表中的一部分数据装载到一个新表中,或者可以通过 SELECT * FROM 子句将已有表的所有数据装载到创建的表中。
CREATE TABLE NEW_EMP
AS
SELECT * FROM EMPLOYEE;
如果用户通过单表的全表查询进行建表操作,则可以通过将 INI 参数 CTAB_SEL_WITH_CONS 置为 1 进行原始表上约束的拷贝,列上能拷贝的约束包括默认值属性、自增属性、非空属性以及加密属性,表上能拷贝的约束包括唯一约束、PK 约束以及 CHECK 约束。也可将 CTAB_SEL_WITH_CONS 置为 2 进行原始表上表结构、分区信息、存储信息以及表约束的拷贝(仅限 huge 表与 huge 表之间或行表与行表之间进行拷贝),其中表约束包括唯一约束、PK 约束以及 CHECK 约束。




