1、数据库与实例
不同于oracle数据库,一个实例对应一个数据库。GP可以在一个实例上建立多个数据库。
DB2也是一个实例下可以建立多个数据库,而oracle一个实例下通常只有一个数据库,其实可以一个数据库对应多个实例。
2、导入和导出
GP数据加载卸载数据( load unload,其实就是导入和导出) COPY不支持 并行操作 在多个节点上同时进行,copy命令是属于PostgreSQL的命令。
Create External Table Readable External Table 是load数据
Regular Web这种表只能读取 不支持DML Writeable External Table
3、根据template创建数据库
建立数据库基于template 每个新建的GP都有一个默认的数据库template1,
如果不指定模板,template1就是你创建数据库的模板。 在template1中不要创建任何数据对象,
除非你要在其他数据库中也要创建该对象。 除了template1还有template0,postgres 2个数据库 template0中没有任何数据对象,只是包含标准的数据对象。
4、创建数据库 、Drop数据库
数据库端:CREATE DATABASE dbname
客户端:CREATEDB -h hostname -p 5432 dbname
默认是根据template1来创建,可以指定template创建
create database dbname1 template dbname2
Drop database dbname;
DROPDB -h hostname -p 5432 dbname
5、Alter DATABASE dbname
set search_path to mychema
6、查询数据库
select datname from pg_database
6、表空间
不同的表空间存放在不同的磁盘上,高访问的表空间指定放在高配置的磁盘上。
表空间放置在不同segment的文件位置,收集这些文件系统的位置称为为filespace,
filespace可以被多个表空间所使用。 在一个逻辑文件系统中,你不能控制每一个文件的位置,因此没有必要为一个逻辑文件系统指定filespace
7、Create Schema schemaName
create schema schemaName authorization username
8、select current_schema();
show search_path;
9、DROP SCHEMA myschema CASCADE
schema下的所有object
10、数据类型
CHAR VARCHAR Text没有性能上的差距,而在其他数据上CHAR VARCHAR有性能差距
一般情况下 BIGINT 可以用INT或者SMALLINT代替
在join的时候 需要考虑数据类型的一致性
11、数据约束
create table AA(
c varchar(20) primary key,
a varchar(20) not null,
b numeric check(price >0)
)
DISTRIBUTED BY a
Foreign Key 在4.0版本并不完全支持,分布在不同segment上的table对外键的校验支持不好
numberic(18,4)???????
12、选择分布策略
DISTRUBUTED BY
DISTRUBUTED RANDOMLY
表有主键或者第一列作为DT列,那么使用hash算法分布( eligible )
最好是采用每个表都有不同的值,进行分布
13、默认是采用B—Tree索引
Create index aaa on tablename(AA)
create index bbb on tablename using bitmap (gender)
唯一索引必须是DT列,唯一索引在append-only表中不支持
位图索引在OLAP数据库中性能比较好,适用于DML操作较少的数据库,但是占用空间较大,尤其对于大表来讲,位图索引甚至会比表中的索引数据还要大,一般情况下索引占用空间只是表中索引列一部分,位图索引数据压缩比较好,convert函数将bit position转换为行的id?????
索引列在100至10000个不同的值下性能比较好,人的性别不同值比较少,超过10万个不同的值,位图索引的性能将下降,位图索引占用空间的大小与索引列的不同值成比例。
列的不同值超过10万个 一般不适用位图索引,不管表中数据有多少。
对于有大量DML操作的OLTP数据库不适用于位图索引
使用位图索引需要谨慎,一般是在测试性能改进后使用。
Bitmap indexes can dramatically improve query performance for ad hoc queries. AND and OR conditions in the WHERE clause of a query can be resolved quickly by performing the corresponding Boolean operations directly on the bitmaps before converting the resulting bitmap to tuple ids. If the resulting number of rows is small, the query can be answered quickly without resorting to a full table scan.
REINDEX tablename
REINDEX indexname