操作手册
【试用教程】快速使用PolarDB PostgreSQL版集群
polardb
手动配置
45
教程简介
在本教程中,您将学习如何快速创建PolarDB PostgreSQL版集群并体验全局索引企业级特性。
PolarDB PostgreSQL版是一款阿里云自主研发的云原生关系型数据库产品,100%兼容PostgreSQL,具有毫秒级延迟、HTAP的能力和高可靠、高可用、弹性扩展等企业级数据库特性。
全局索引(Global Index)是一种在分区表上创建的索引。不同于默认在每个子分区上创建的局部索引(Local Index,一个索引对应一个子分区),全局索引通过一个索引来索引整个分区表的数据(一个索引对应多个子分区),从而可以提供非分区键上的全局唯一约束,也可以大幅提升非分区键的查询性能。
我能学到什么
学会如何快速创建PolarDB PostgreSQL版集群。
学会如何使用全局索引。
操作难度 | 中 |
所需时间 | 35分钟 |
使用的阿里云产品 | |
所需费用 | 0元 |
准备环境和资源
20
开始教程前,请按以下步骤准备环境和资源:
访问阿里云免费试用。单击页面右上方的登录/注册按钮,并根据页面提示完成账号登录(已有阿里云账号)、账号注册(尚无阿里云账号)或实名认证(根据试用产品要求完成个人实名认证或企业实名认证)。
成功登录后,在产品类别下选择数据库 > 关系型数据库,在PolarDB PostgreSQL版卡片上单击立即试用。教程使用的集群节点规格为标准版 2核8G、存储空间为50 GB、子系列为通用规格,实际操作时,建议根据您的业务体量和需求选择。
在配置PolarDB PostgreSQL版集群信息面板,完成参数配置。完成本教程需要的配置如下:
VPC网络和交换机:
如果您已创建符合您网络规划的VPC和交换机,直接选择该VPC和交换机。
如果您未创建符合您网络规划的VPC和交换机,可以使用默认的VPC和交换机。
如果以上已创建的和默认的VPC和交换机无法满足您的要求,可以自行创建VPC和交换机,详情请参见创建和管理专有网络。
其他参数:保持默认值或按需修改
同意协议后,单击免费试用,根据页面提示试用申请。
开通成功后,需要10~15分钟创建集群,之后您就可以在集群列表中看到新创建的集群。
创建数据库账号
3
登录PolarDB控制台,单击左侧集群列表,然后选择云产品资源提供的地域。例如:华东1(杭州)。
创建数据库账号。
在集群列表页面,单击集群ID,进入基本信息页面。
在左侧导航栏中,单击配置与管理 > 账号管理。
单击左上方创建账号。
参考说明配置账号信息,然后单击确定。请记录此处创建的数据库账号及密码,后续步骤中会反复使用。
账号名:输入数据库账号名称,例如:temp。
账号类型:此处选择高权限账号。
密码:设置账号密码。
确认密码:再次输入密码。
创建数据库
2
在左侧导航栏中,选择配置与管理 > 数据库管理。
单击创建数据库,配置以下参数,然后单击确定。
数据库:输入数据库名称。例如,test123。
数据库Owner:选择已创建的账号。例如,temp。
支持字符集:此处选择UTF8。
Collate:字符串排序规则,保持默认即可。
Ctype:字符分类,保持默认即可。
登录数据库
2
在左侧导航栏中,选择配置与管理 > 数据库管理。
单击右上角的登录数据库。
输入创建的数据库账号的用户名和密码,单击登录,跳转至DMS。
数据库账号:temp
数据库密码:********
登录DMS后,在左侧导航栏的已登录实例列表中,单击目标集群名称,单击目标数据库名称,双击public,即可切换到目标数据库进行管理。
使用全局索引
15
准备数据。
当用户有大量的时序数据,越近产生的数据被访问得越频繁,旧的数据基本很少被访问。此时可以将数据以时间列作为分区键,使用范围分区策略对数据进行分区。
创建一个范围分区的分区表,分区键为时间列。
CREATE TABLE partition_range ( id INT, created_date TIMESTAMP WITHOUT TIME ZONE ) PARTITION BY RANGE (created_date);
以月为单位,为这个分区表创建四个子分区。
CREATE TABLE partition_range_part01 PARTITION OF partition_range FOR VALUES FROM (MINVALUE) TO ('2020-01-01 00:00:00'); CREATE TABLE partition_range_part02 PARTITION OF partition_range FOR VALUES FROM ('2020-01-01 00:00:00') TO ('2020-02-01 00:00:00'); CREATE TABLE partition_range_part03 PARTITION OF partition_range FOR VALUES FROM ('2020-02-01 00:00:00') TO ('2020-03-01 00:00:00'); CREATE TABLE partition_range_part04 PARTITION OF partition_range FOR VALUES FROM ('2020-03-01 00:00:00') TO ('2020-04-01 00:00:00');
为每一个子分区插入数据。
INSERT INTO partition_range VALUES (generate_series(1,1000000),'2019-01-01 00:00:00'); INSERT INTO partition_range VALUES (generate_series(1,1000000),'2020-01-01 00:00:00'); INSERT INTO partition_range VALUES (generate_series(1,1000000),'2020-02-01 00:00:00'); INSERT INTO partition_range VALUES (generate_series(1,1000000),'2020-03-01 00:00:00');
使用分区键进行查询。
当对分区表进行全表扫描时,数据库将对每一个子分区进行扫描。
SELECT * FROM partition_range;
而在查询过滤条件中使用分区键时,数据库优化器将通过分区裁剪,只扫描符合条件的子分区,显著减少需要扫描的数据量。在当前示例中,如果以某个特定的时间范围对分区表进行扫描,优化器将根据这个时间范围,过滤掉不满足时间范围的子分区。
SELECT * FROM partition_range WHERE created_date > '2020-03-01 00:00:00';
使用非分区键进行查询。
当查询条件中没有引用分区键时,数据库将不得不扫描所有的子分区,才可以获取到正确的结果。
查看执行计划。
SELECT * FROM partition_range where id = 5;
得到结果的耗时约为458 ms。
SELECT * FROM partition_range where id = 5;
即使在分区表上对需要查询的列建立索引,由于创建的索引是局部索引,而局部索引会建立在每一个子分区表上,因此依然需要对三个索引分别进行扫描。
创建索引。
CREATE INDEX partition_range_idx_local ON partition_range(id);
查看执行计划。
SELECT * FROM partition_range WHERE id = 5;
创建全局索引并进行非分区键查询。
对需要扫描的非分区列创建全局索引。全局索引是一个建立在跨越所有子分区之上的索引,能够有效提升非分区键的查询性能。
创建全局索引。
CREATE INDEX partition_range_idx_global ON partition_range(id) GLOBAL;
查看执行计划。
SELECT * FROM partition_range WHERE id = 5;
得到结果的时间缩短为46 ms。
SELECT * FROM partition_range WHERE id = 5;
完成
1
通过创建全局索引并进行非分区键查询的结果显示,运行时间提升了90%,有效提升非分区键的查询性能。
清理及后续
2
清理
PolarDB PostgreSQL版集群的试用时长为1个月,到期未释放可能产生欠费。如不再使用该集群,请登录PolarDB控制台,找到目标集群,在操作列单击更多>释放,按照界面提升手动释放集群。
后续
创建PolarDB PostgreSQL版集群后,后续您可以体验PolarDB PostgreSQL版的更多内核功能。例如,预读和预扩展、WAL日志并行回放等功能。具体操作,请参见内核功能。
总结
常用知识点
问题1:非分区表、带有子分区的子表上能否支持创建全局索引?(单选题)
正确答案是不能。