创建数据库
语法 | 参数 | 参数作用 |
---|---|---|
create database db_name | with | |
owner | ||
template | 使用数据库模板名 | |
encoding | ||
allowconn | 默认为true 是否允许连接 | |
connlimit | 限制连接数,默认没有限制 | |
istemplate | 是否为模板库 |
删除数据库
语法 | 参数 | 参数作用 |
---|---|---|
drop databse if exists database_name |
修改数据库
语法 | 参数 | 参数作用 |
---|---|---|
ALTER DATABASE name RENAME TO new_name; | 改名 | |
ALTER DATABASE name OWNER TO new_owner; | 修改所有者 | |
alter database name with ... | 修改数据库选项 | |
ALTER DATABASE name SET TABLESPACE new_tablespace; | 修改数据库表空间 | |
ALTER DATABASE name SET configuration_parameter FROM CURRENT; | 修改数据库配置文件 |
创建表
选择column数据类型
- 最小的空间存储数据
- 对数据范围的约束
设置table和column约束
- 检查约束 check
- 非空约束
- 唯一约束
- 主键约束
- 外键约束(不支持)
选择表的分布策略
-
考略因素
- 平坦的数据分布:大表之间关联的某个唯一性较高的字段
- 本地操作与分布式操作
- 平坦的查询处理
声明分布键
- distributed by ;distributed randonly;distributed replicaied
选择表的存储类型
-
堆存储
-
追加优化存储 ao
- 创建ao appendoptimized=true
- 选择行存,列存crientation=true 1.更新操作:行存heap表 2.insert操作:行 3.查询column多:行,单字段,列 4.表中字段数 5.压缩,列
- 使用压缩 compresstype='' compresslevel=5 113页
表分区
是否要分区原则
- 表足够大,每个分区在每个instance上数据量在100-1000万
- 查询条件是否满足分区条件
- 数据仓库是否要滚动历史数据
- 某个规则下的数据是否可以均匀拆分
创建分区表
-
时间范围分区 rangge
- 考虑最细的颗粒进行分区
-
数字范围分区 range
-
定义列表分区表 list
- 多个column组合(范围分区不允许)
插入数据到分区表
- 非叶子分区没有数据,数据在最底层,不能匹配添加到默认分区
验证分区策略
- 使用 explain 查看sql执行计划
分区选择性诊断
维护分区表
-
必须使用alter table从root表来维护
-
添加/修改/删除/拆分新分区
序列 ?
特殊的单行表
创建序列
- 字段类型为serial
- create sequence
索引
视图
视图就是一个sql
创建视图
- create view name as select...
删除视图
- drop view name
物化视图
- 将查询结果持久化为数据文件,不会刷新,只能通过refresh materialized view 刷新数据