数据库之路——greenplum数据库学习笔记

一、常用指令:
1.取端口号:select  * from gp_segment_configuration 
2.select * from pg_stat_activity  该表能查看到当前数据库连接的IP 地址,用户名,提交的查询等。
3.select pg_size_pretty(pg_relation_size('schema.tablename'));查看数据库占用空间
4.select pg_size_pretty(pg_database_size('databasename));查看表占用空间
5.Vacuum analyze tablename 回收垃圾和收集统计信息
6.Select gp_segment_id,count(*) from  tablename  group by 1 ;查看数据分布情况
7.gp_segment_configuration实例恢复
8.8.SELECT locktype, database, c.relname, l.relation, l.transactionid, l.transaction, l.pid, l.mode, l.granted, a.current_query FROM pg_locks l, pg_class c, pg_stat_activity a WHERE l.relation=c.oid AND l.pid=a.procpid ORDER BY c.relname;
主要字段说明:
relname: 表名

locktype、mode 标识了锁的类型


二、表分布
Hash分布:create table ... Distributed by(column1,column2...);同样数值的内容被分配到同一个segmment(如没有明确定义分布键,系统会把第一个字段作为分布键)
循环分布:create table ... Distributed randomly;


三、表相关:
1.创建表:CREATA TABLE 表名 DISTRIBUTED BY(表分布键);  --指定分布键
         CREATA TABLE 表名 DISTRIBUTED RANDOMLY    --默认表的第一列作为分布键

 【注:分布键设置类型不能为几何数据类型或用户自定义数据类型】


2.表和列的约束:check 表或列的约束
               NOT NULL 列约束
               UNIQUE 列约束【注:每表只能一个,被UNIQUE定义列会作为表分布键,如果表设置了主键则不允许有UNIQUE约束】

               PRIMATY KEY 表约束


3.外部表:创建:CREATE EXTERNAL [WEB] TABLE

         删除:DROPEXTERNAL [WEB] TABLE


4.表的存储模式:
  存储模式:堆存储、只追加(AO)、行存储、列存储、压缩表(只可以是AO表)
  创建堆表:CREATE TABLE 表名(a int ,b text) DISTRIBUTED BY (列名);
  只追加表:CREATE TABLE 表名(a int ,b text) WITH(appendonly = true);
  列存表:CREAT TABLE 表名(a int,b text) WITH(appendonly=true,orientation=列名) DISTRIBUTED BY(列名);没有指定orientation的为行存表
  压缩表:CREATE TABLE 表名(a int,b text) 
WITH(appendonly=true,compresstype=zilb,compresslevel=5); --创建一张5级ZLIB压缩的AO表

5.删除表
 DDROP TABLE 表名;
 DELETE FROM 表名;  --不删除表但清空表中记录

 TRUNCATE 表名     --不删除表单清空表中记录


6.表的分区策略(调优):以下因素大部分答案为也是,可通过分区策略提高查询性能
 决定因素:(1)表是否足够大?(百万级或以上条记录)、
                    (2)对目前性能不满意?
                    (3)查询条件是否能匹配分区条件?(检查查询语句的where条件是否与考虑分区的column一致)
                    (4)数据仓库是否需要滚动历史数据?(可按照记录日期分区)
                    (5)按照某个规则数据是否可被均匀分拆?
  创建分区表:通过使用start、end值、every子句定义分区增量实现自动产生分区
                        【注:start值总是被包含而end值总是被排除】
          Eg:CREATE TABLE 表名(列1,列2......) DISTRIBUTED BY(列名)
              PARTITION BY RANGE(分区键)
              (START(分区键值1)INCLUSIVE
                END(分区键值2)EXCLUSIVE
                EVERY(INTERVAL ‘增量值’));
              每个分区单独指定名称:
              【注:每个分区范围是连续的则不需为每个分区指定END值】
          Eg:CREATE TABLE 表名(列1,列2......) DISTRIBUTED BY(列名)
              PARTITION BY RANGE(分区键)
              (PARTITION 分区1名 START(分区键值1)INCLUSIVE,
               PARTITION 分区2名 START(分区键值2)INCLUSIVE,
               PARTITION 分区3名 START(分区键值3)INCLUSIVE,
               ......
               END(分区键值n)EXCLUSIVE);
  分区表限制:主键或唯一约束必须包含表上所有分区键。而唯一索引可不包含分区键
  查看分区设计:SELECT partitionboundary,partitionablename,partitionlevel,partitionrank FROM pg_partitions WHERE tablename=’表名’;
  添加新分区:ALRER TABLE表名 ADD PARTITION
                         START()  INCLUSIVE
                         END() EXCLUSIVE;
  删除分区:ALTER TABLE 表名DROP PARTITION FOR(RANK(partitionrank))
                      RABK(partitiontank)指范围分区同意层级中的顺序

  清空分区数据:ALTER TABLE 表名 TRUNCATE PARTITION FOR(RANK(partitionrank));


三、视图和索引:
CREATE VIEW               CRREATE INDEX
DROP VIEW                DROP INDEX
使用索引需考虑:
1.查询工作负载:对于查询工作负载需返回大量数据的情况而言索引未必有效
2.压缩表:对于压缩数据而言,索引访问方法是解压需要的记录而不是全部解压
3.避免你在频繁更新列表上使用索引:会消耗大量写磁盘和CPU计算资源
4.创建选择性B-tree索引:选择性指数=DISTINCT值数量/表记录数,即表中重复记录越多,建立B-tree索引越有用(DISTINCT值在100到100000之间最佳,超100000之后不宜使用)
5.低选择性列上使用位图索引
6.索引列用于关联:或许可以改善join(关联)性能

7.索引列经常用在查询条件中:对大表来说,查询语句where条件中常用到的列可考虑使用索引


创建索引:

1.创建B-tree索引:CREATE INDEX 索引名 ON 表名(索引键);

 2.创建位图索引:CREATE INDEX 索引名ON 表名 USING bitmap(索引键);


更新记录:UPDATE 表名 SET 赋值表达式 WHERE 查询条件;
删除记录:DELETE FROM 表名 WHERE 查询条件;

你可能感兴趣的:(数据库)