Greenplum+Hadoop学习笔记-14-定义数据库对象之创建与管理序列、索引以及视图,hadoop-14-
6.5.创建与管理序列
序列常用于在新增记录时自动生成唯一标识符,序列的管理包括创建序列、使用序列、修改序列以及删除序列。
6.5.1.创建序列
使用CREATESEQUENCE命令来创建并初始化一个给定名称的单列序列表;
|
devdw=# \h CREATE SEQUENCE 查看创建序列的帮助 Command: CREATE SEQUENCE Description: define a new sequence generator Syntax: CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table.column | NONE } ]
devdw=# \ds 通过\ds命令查看当前数据库中存在的序列 No relations found. devdw=# create sequence myseq start with 100; 创建名为myseq的序列 CREATE SEQUENCE devdw=# \ds 通过\ds命令查看当前数据库中存在的序列 List of relations Schema | Name | Type | Owner | Storage -------+-------+----------+---------+--------- public | myseq | sequence | gpadmin | heap (1 row) |
6.5.2.使用序列
1) 可以使用nextval函数对序列进行操作。例如:获取序列的下一个值并插入表中:
2) 重置一个序列计数器的值,函数nextval是不回滚的,一旦使用nextval中生成这个序列时下次使用时不能使用这个值,不管该序列创建是否成功还是失败;
注意:如果启用了镜像功能,nextval不允许在UPDATE和DELETE语句中被使用。
3) 检查序列当前的计数设置:SELECT * FROM SEQ_NAME;
|
devdw=# select setval('myseq',200); 通过设置myseq的序列值为20 setval ------------- 200 (1 row) devdw=# select nextval('myseq'); 查看当前序列的下一个值 nextval --------- 201 (1 row) devdw=# select * from myseq; 查看当前序列的信息 sequence_name | last_value | increment_by | max_value | min_value | cache_value | log_cnt | is_cycled | is_called ---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+----------- myseq | 200 | 1 | 9223372036854775807 | 1 | 1 | 0 | f | t |
6.5.3.修改序列
使用ALTERSEQUENCE命令修改已有的序列表。
|
devdw=# \h alter sequence 查看修改序列的帮助 Command: ALTER SEQUENCE Description: change the definition of a sequence generator Syntax: ALTER SEQUENCE name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ RESTART [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table.column | NONE } ] ALTER SEQUENCE name SET SCHEMA new_schema
devdw=# alter sequence myseq start with 205; 修改当前序列的开始值为205 ALTER SEQUENCE |
6.5.4.删除序列
使用DROPSEQUENCE命令删除已有的序列表。
|
devdw=# \h drop sequence 查看修改序列的帮助 Command: DROP SEQUENCE Description: remove a sequence Syntax: DROP SEQUENCE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
devdw=# drop sequence myseq; 删除当前序列 DROP SEQUENCE devdw=# \ds 再次查看当前序列时提示无序列 No relations found. |
6.6.创建与管理索引
6.6.1.关于索引的使用说明
1) 在分布式数据库如GP中,应保守使用索引,原因在于GP属于分布式数据库,不等同于传统数据库
2) 在返回一定量结果的情况下,索引同样可以有效改善压缩AO(Append-Only)表上的查询性能,索引本质上是随机的寻址操作,而数据仓库返回的数据量是海量级别的;
3) GP会自动为主键建立主键索引,如果在父表中创建好索引,则GP默认会为分区表创建好索引;但在修改父表索引时不能默认修改分区表的索引;
4) 需确保索引的创建在

