1 表空间
1.1 GaussDB自带了两个表空间:pg_default和pg_global
1.1.1 默认表空间pg_default:用来存储非共享系统表、用户表、用户表index、临时表、临时表index、内部临时表的默认表空间。对应存储目录为实例数据目录下的base目录。
1.1.2 共享表空间pg_global:用来存放共享系统表的表空间。对应存储目录为实例数据目录下的global目录。
1.2 华为建议使用默认表空间,性能更好?
1.3 SET default_tablespace = ‘fastspace’;
1.4 SELECT spcname FROM pg_tablespace;
2 系统表
2.1 兼容PG的系统表和系统视图
2.1.1 这类系统表和系统视图具有PG前缀。
2.2 GaussDB新增的系统表和系统视图
2.2.1 这类系统表和系统视图具有GS前缀。
2.3 兼容O数据库的系统表和系统视图
2.3.1 这类系统表和系统视图具有ALL、DBA、USER或PV前缀。
2.4 参考文档
2.4.1 https://support.huaweicloud.com/intl/zh-cn/centralized-devg-v8-gaussdb/gaussdb-42-0864.html
3 索引
3.1 唯一索引
3.1.1 CREATE UNIQUE INDEX
3.2 多字段索引
3.3 部分索引
3.3.1 建立在一个表的子集上的索引,这种索引方式只包含满足条件表达式的元组。
3.3.2 CREATE INDEX part_index ON tpcds.customer_address_bak(ca_address_sk) WHERE ca_address_sk = 5050;
3.3.3 这个模式oracle不支持,类似部分分区索引
3.4 表达式索引
3.4.1 索引建立在一个函数或者从表中一个或多个属性计算出来的表达式上。表达式索引只有在查询时使用与创建时相同的表达式才会起作用。
3.4.2 CREATE INDEX para_index ON tpcds.customer_address_bak (trunc(ca_street_number));
3.5 分区索引
3.5.1 LOCAL
指定创建的分区索引为LOCAL索引。
CREATE INDEX idx_student1 ON student(id) LOCAL;
3.5.2 GLOBAL
指定创建的分区索引为GLOBAL索引,当不指定LOCAL、GLOBAL关键字时,默认创建GLOBAL索引。
CREATE INDEX idx_student2 ON student(name) GLOBAL;
3.5.3 可以在部分分区创建特定索引
CREATE INDEX idx_student3 ON student(lower(name)) LOCAL;
CREATE INDEX idx_student4 ON student(lower(name)) GLOBAL;
3.6 INCLUDE
3.6.1 可选的 INCLUDE 子句指定将一些非键列(non-key columns)包含在索引中。非键列不能用于作为索引扫描的加速搜索条件,同时在检查索引的唯一性约束时会忽略非键列。
3.6.2 可以加速查询?
3.7 WHERE predicate
3.7.1 部分索引是一个只包含表的一部分记录的索引,通常是该表中比其他部分数据更有用的部分
3.7.2 例如,有一个表,表里包含已记账和未记账的订单,未记账的订单只占表的一小部分而且这部分是最常用的部分
3.8 REINDEX
3.8.1 REINDEX CONCURRENTLY在线重建索引导致表上索引顺序改变时,可能会导致查询计划改变
3.8.2 在线重建索引只支持B-tree索引和UB-tree索引,只支持普通索引、GLOBAL索引、LOCAL索引,不支持PCR ubtree索引,不支持二级分区与GSI
3.9 并行创建索引
3.9.1 ALTER TABLE table_name SET (parallel_workers=4);
3.9.2 REATE INDEX index_name ON table_name(col1);
3.9.3 ALTER TABLE table_name RESET (parallel_workers);
4 视图
4.1 管理视图
5 序列
5.1 DB_SEQUENCES视图显示当前用户能够访问的所有序列的信息。该视图同时存在于PG_CATALOG和SYS Schema下。
6 定时任务
6.1 并发控制
6.1.1 当job_queue_processes为0时,表示不启用定时任务功能,任何job都不会被执行。
6.1.2 当job_queue_processes大于0时,表示启用定时任务功能,该值为系统能够并发处理的最大任务数。
7 database
7.1 一个数据库实例内,用户自定义的Database数量推荐值为3个,不建议超过10个
7.2 建议创建Database的时候使用UTF-8编码
7.3 Database的owner默认拥有该Database下所有对象的所有权限,包括删除权限。删除权限影响较大,请谨慎使用
8 schema
8.1 实际用户环境中Schema数量不建议超过100个。当数据库中存在大量Schema时,会导致gs_dump等依赖Schema数量的操作性能变慢
8.2 Schema的owner默认拥有该Schema下对象的所有权限,包括删除权限。删除权限影响较大,请谨慎使用。
9 表
9.1 字段
9.1.1 选择数值类型时,在满足业务精度的情况下,选择数据类型的优先级从高到低依次为整数、浮点数、NUMERIC。
9.1.2 除非明确知道数据类型为固定长度字符串,否则,不建议使用CHAR(n)、BPCHAR(n)、NCHAR(n)、CHARACTER(n)。
9.1.3 在需要数据类型转换(不同数据类型进行比较或转换)时,使用强制类型转换,以防隐式类型转换结果与预期不符
9.1.4 字段递增列
GaussDB数据库支持创建自动递增列,您可以在创建表时,指定SERIAL数据类型。
CREATE TABLE table_name(id serial, name varchar(20));
使用序列
–创建序列。
gaussdb=# CREATE SEQUENCE tbl_person_id_seq;
–创建表tbl_persion,其中id字段依据序列tbl_person_id_seq实现自增。
gaussdb=# CREATE TABLE tbl_persion(
id int NOT NULL DEFAULT nextval(‘tbl_person_id_seq’::regclass),
name varchar(20));
9.1.5 默认为当前时间的列
CREATE TABLE tbl (id int, modtime date DEFAULT CURRENT_TIMESTAMP);
9.2 约束
9.2.1 唯一约束
从命名上明确标识唯一约束,例如,命名为“UNI+字段名”。
9.2.2 主键约束
从命名上明确标识主键约束,例如,将主键约束命名为“PK+字段名”。
9.2.3 检查约束
从命名上明确标识检查约束,例如,将检查约束命名为“CK+字段名”。
9.3 索引
9.3.1 索引字段的总长度不超过50字节。否则,索引大小会膨胀比较严重,带来较大的存储开销,同时索引性能也会下降
9.4 查询分区表分区信息和索引信息
9.4.1 使用pg_get_tabledef()函数查看表的定义,返回信息包含建表SQL、注释、索引、约束等。
9.4.2 分区信息可以查询视图pg_partition,索引信息可以查询视图pg_indexes。
9.4.3 还有pg_tables
9.5 分区表
9.5.1 分区方案
Range
表数据通过范围进行分区。
Interval
表数据通过范围进行分区,超出范围的会自动根据间隔创建新的分区。
List
表数据通过指定列按照具体值进行分区。
Hash
表数据通过Hash散列方式进行分区。
9.5.2 分区表运维管理
包括新增(Add)、删除(Drop)、交换(Exchange)、清空(Truncate)、分割(Split)、合并(Merge)、移动(Move)、重命名(Rename)
- 使用移动分区的命令来将一个分区移动到新的表空间中
- 可以使用ALTER TABLE ENABLE/DISABLE ROW MOVEMENT来开启/关闭分区表行迁移
交换分区,进行交换的普通表和分区必须满足如下条件:
- 普通表和分区的列数目相同,对应列的信息严格一致。
- 普通表和分区的表压缩信息严格一致。
- 普通表索引和分区Local索引个数相同,且对应索引的信息严格一致。
- 普通表和分区的表约束个数相同,且对应表约束的信息严格一致。
- 普通表不可以是临时表。
- 普通表和分区表上不可以有动态数据脱敏,行访问控制约束。
注意事项
- 执行交换分区命令会使得Global索引失效,可以通过UPDATE GLOBAL INDEX子句来同步更新Global索引,或者用户自行重建Global索引。
- 执行交换分区时,可以申明WITH/WITHOUT VALIDATION,表明是否校验普通表数据满足目标分区的分区键约束规则(默认校验)。
- 数据校验活动开销较大,如果能确保交换的数据属于目标分区, 可以申明WITHOUT VALIDATION来提高交换性能。
- 可以申明WITH VALIDATION VERBOSE,此时数据库会校验普通表的每一行,将不满足目标分区的分区键约束规则的数据,插入到分区表的其他分区中,最后再进行普通表与目标分区的交换。
10 JDBC配置
10.1 JDBC向GaussDB发起连接请求,会默认添加以下配置参数
10.1.1 params = {
{ “user”, user },
{ “database”, database },
{ “client_encoding”, “UTF8” },
{ “DateStyle”, “ISO” },
{ “extra_float_digits”, “3” },
{ “TimeZone”, createPostgresTimeZone() },
};
10.2 对于精度敏感的场景,建议使用numeric类型
10.3 通过JDBC连接数据库时,应该保证以下三个时区设置一致:
- JDBC客户端所在主机的时区。
- GaussDB数据库实例所在主机的时区。
- GaussDB数据库实例配置过程中时区。
11 RESOURCE POOL
CREATE RESOURCE POOL用于创建一个资源池,并指定此资源池相关联的控制组。
-
只有SYSADMIN或初始用户才能执行此操作。
12 对象名称的长度是否有限制
12.1 在创建数据库对象时命名长度不可超过63个字节
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » GaussDB 主备版本8 -数据库对象 学习
发表评论 取消回复