PolarDB for PostgreSQL 14:全局索引
1. 选择实验资源
本实验支持实验资源体验、开通免费试用、个人账户资源三种实验资源方式。
在实验开始前,请您选择其中一种实验资源,单击确认开启实验。
如果您选择的是实验资源体验,资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等)。
说明:实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。
如果您选择的是开通免费试用,下方卡片会展示本实验支持的试用规格,可以选择你要试用的云产品资源进行开通。您在实验过程中,可以随时用右下角icon唤起试用卡片。
说明:试用云产品开通在您的个人账号下,并占用您的试用权益。如试用超出免费试用额度,可能会产生一定费用。
阿里云支持试用的产品列表、权益及具体规则说明请参考开发者试用中心。
2. 领取免费试用资源
说明:
试用云产品开通在您的个人账号下,并占用您的试用权益。如试用超出免费试用额度,可能会产生一定费用。阿里云支持试用的产品列表、权益及具体规则说明请参考开发者试用中心。
如果您的阿里云账号只能领取部分免费试用产品,请您领取符合免费试用资格的产品,然后进入实验,不满足免费试用资格的产品将会使用个人账户资源进行创建,并会产生一定的费用,请您及时关注账户扣费。
在实验开始前,请您选择开通免费试用。
开通云原生数据库PolarDB PostgreSQL版免费试用。
2.1 在实验室页面下方,选择云原生数据库PolarDB PostgreSQL版,单击立即试用。
2.2 在云原生数据库PolarDB PostgreSQL版面板,参考如下说明完成参数配置,未提及的配置保持默认选项,选中服务协议,然后单击立即试用,如弹出新的页面,您可先忽略。
参数说明:
配置项 |
示例 |
说明 |
地域 |
华东1(杭州) |
选择实例所在地域。 |
VPC网络和交换机 |
|
选择您的VPC网络和交换机。 |
2.3 前往PolarDB控制台。
2.4 在集群列表页面,您需要耐心等待10~15分钟,运行状态变为运行中,您就可以正常使用云原生数据库PolarDB PostgreSQL集群。
领取完免费试用后,返回资源领取界面,单击我已开通,进入实验。
3. 创建实验资源
注意事项:当您选择个人资源时,需要您根据如下步骤创建云原生数据库PolarDB PostgreSQL版,并会产生部分费用,详情请参见计费概述。
前往PolarDB控制台。
在集群列表页面,单击创建新集群。
在基础配置页面,根据如下说明配置参数,未提及的配置保持默认选项或根据需求自行选择,单击下一步:集群配置。
参数说明:
参数 |
示例 |
说明 |
地域 |
华东1(杭州) |
集群所在的地理位置。购买后无法更换地域。 |
创建方式 |
创建主集群 |
创建PolarDB集群的方式。
说明:其他选项用于创建其它引擎的数据库。 |
数据库引擎 |
PostgreSQL兼容 PostgreSQL14 |
说明:
|
开启热备集群 |
开启存储热备 |
如果开启存储热备集群,PolarDB会在Region内同时部署主集群(包含互备计算节点+存储主集群)和存储热备集群,存储主集群和存储热备集群各 3 副本(共 6 副本数据),更高SLA可靠性保障。 如果不开启存储热备集群,则仅保留主集群( 3 副本数据),存储单价会是开启存储热备集群单价的 1/2。 |
节点规格 |
2核8 GB,规格代码为polar.mysql.x4.medium |
按需选择。所有PolarDB节点均为独享型,性能稳定可靠。 更多关于计算节点规格的详情,请参见规格与定价。 |
在集群配置页面,根据如下说明配置参数,未提及的配置保持默认选项或根据需求自行选择,单击下一步:确认订单。
参数说明:
参数 |
示例 |
说明 |
网络类型 |
固定为VPC专有网络,无需选择。 |
固定为VPC专有网络,无需选择。 |
VPC网络 VPC交换机 |
选择VPC网络和交换机。 |
请确保PolarDB与需要连接的ECS创建于同一个VPC,否则它们无法通过内网互通,无法发挥最佳性能。
|
在确认订单页面,选中服务协议,单击立即购买。
在开通完成页面,单击管理控制台。
在集群列表页面,您需要耐心等待10~15分钟,运行状态变为运行中,您就可以正常使用云原生数据库PolarDB PostgreSQL集群。
4. 创建用户并登录到DMS
双击打开远程桌面的Chromium网页浏览器。
在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码到用户密码输入框,单击登录。
复制下方地址,在Chromium网页浏览器打开新页签,粘贴并访问云数据库PolarDB控制台。
https://polardb.console.aliyun.com/
在集群列表页面顶部菜单栏中,切换资源所在地域。
说明:您可在云产品资源列表中查看实验室提供的PolarDB for PostgreSQL资源所在地域。
在集群列表页面,找到实验室提供的集群,单击集群ID。
在左侧导航栏中,选择配置与管理>账号管理。
对于一个新实例来说,我们需要创建一个新的用户才可以使用PolarDB实例。
在账号管理页面,单击创建账号。
在创建账号面板,参开如下说明配置参数,然后单击确定。
参数说明:
账号名:自定义账号名,本教程以polardb。
账号类型:选择高权限账号。
密码:自定义密码,本教程以Password123为例。
确认密码:再次输入密码。
另外,如果需要使用自己的客户端来连接阿里云上的PolarDB实例,还需要配置客户端的IP地址白名单。只有在这个白名单中的IP地址才可以连接到PolarDB上。在本实验中,我们可以直接使用阿里云数据库的DMS(数据管理服务),连接到数据库。这样就会使用DMS的内部IP地址来连接数据库,是不需要配置IP白名单的。
在账号管理页面,单击页面上方的登录数据库。
在登录实例对话框中,输入您刚刚创建的数据库账号和数据库密码,单击测试连接。
在成功对话框中,单击确认。
在登录实例对话框中,单击登录。
返回如下页面,表示您已成功通过DMS连接默认数据库postgres。
5. 创建用户并登录到DMS
说明:本实验需要使用数据管理DMS,请如果您未开通DMS服务,请先开通DMS服务。
前往PolarDB控制台。
在集群列表页面,找到实验室提供的集群,单击集群ID。
在左侧导航栏中,选择配置与管理>账号管理。
对于一个新实例来说,我们需要创建一个新的用户才可以使用PolarDB实例。
在账号管理页面,单击创建账号。
在创建账号面板,参开如下说明配置参数,然后单击确定。
参数说明:
账号名:自定义账号名,本教程以polardb。
账号类型:选择高权限账号。
密码:自定义密码,本教程以Password123为例。
确认密码:再次输入密码。
另外,如果需要使用自己的客户端来连接阿里云上的PolarDB实例,还需要配置客户端的IP地址白名单。只有在这个白名单中的IP地址才可以连接到PolarDB上。在本实验中,我们可以直接使用阿里云数据库的DMS(数据管理服务),连接到数据库。这样就会使用DMS的内部IP地址来连接数据库,是不需要配置IP白名单的。
在账号管理页面,单击页面上方的登录数据库。
在登录实例对话框中,输入您刚刚创建的数据库账号和数据库密码,单击测试连接。
在成功对话框中,单击确认。
在登录实例对话框中,单击登录。
返回如下页面,表示您已成功通过DMS连接默认数据库postgres。
6. 准备数据
接下来,我们以一个使用分区表的典型场景为例:用户有着大量的时序数据,越近产生的数据被访问得越频繁,旧的数据基本很少被访问。这时,可以将数据以时间列作为分区键,使用范围分区策略对数据进行分区。
创建一个范围分区的分区表,分区键为时间列。
在SQLConsole页签中,输入以下SQL语句,单击执行。
CREATE TABLE partition_range ( id INT, created_date TIMESTAMP WITHOUT TIME ZONE ) PARTITION BY RANGE (created_date);
以月为单位,为这个分区表创建四个子分区。
在SQLConsole页签中,输入以下SQL语句,单击执行。
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语句将分别把数据插入到四个子分区中。
在SQLConsole页签中,输入以下SQL语句,单击执行。
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');
7. 使用分区键进行查询
当对分区表进行全表扫描时,数据库将对每一个子分区进行扫描。
在SQLConsole页签中,输入以下SQL语句,单击执行计划,此时我们可以查看这个查询SQL的执行计划,其中使用了Append算子汇聚了从每个子分区扫描到的数据:
SELECT * FROM partition_range;
而当我们在查询过滤条件中使用分区键时,数据库优化器将通过分区裁剪,只扫描符合条件的子分区,显著减少需要扫描的数据量。在这个实例中,如果我们以某个特定的时间范围对分区表进行扫描,优化器将根据这个时间范围,过滤掉不满足时间范围的子分区。
在SQLConsole页签中,输入以下SQL语句,单击执行计划,可以看到只有满足条件的一个子分区将被扫描。
SELECT * FROM partition_range WHERE created_date > '2020-03-01 00:00:00';
8. 使用非分区键进行查询
当查询条件中没有引用分区键时,数据库将不得不扫描所有的子分区,才可以获取到正确的结果。
在SQLConsole页签中,输入以下SQL语句,单击执行计划。如下的SQL查询没有引用分区表的分区键,从执行计划中我们可以看到数据库将会扫描其所有的子分区。
SELECT * FROM partition_range where id = 5;
选中上一步的SQL,并单击执行,可以看到其耗时约为354ms。
即使在分区表上对要查询的列建立索引,由于该索引是局部索引,将会建立在每一个子分区表上,数据库依旧需要对每一个子分区上的索引分别进行扫描。
在SQLConsole页签中,输入以下SQL语句,单击执行,创建索引。
CREATE INDEX partition_range_idx_local ON partition_range(id);
在SQLConsole页签中,输入以下SQL语句,单击执行计划。
SELECT * FROM partition_range WHERE id = 5;
9. 创建全局索引并进行非分区键查询
对要扫描的非分区列创建全局索引。全局索引是一个建立在跨越所有子分区之上的索引,能够有效提升非分区键的查询性能。
在SQLConsole页签中,输入以下SQL语句,单击执行,创建全局索引。
CREATE INDEX partition_range_idx_global ON partition_range(id) GLOBAL;
在SQLConsole页签中,输入以下SQL语句,单击执行计划,可以看到使用了全局索引进行扫描。
SELECT * FROM partition_range WHERE id = 5;
选中上一步的SQL,并单击执行,可以看到得到结果的时间缩短为48ms。
10. 释放资源
说明:在实验完成之后,如果您不需要相关的实验资源,请您及时释放,否则可能会产生一定费用。
如果您不再使用PolarDB PostgreSQL版集群,前往PolarDB控制台,找到目标集群,在右侧操作列选择更多>释放,按照界面提升手动释放集群。
实验链接:https://developer.aliyun.com/adc/scenario/b456be5c36664cf9a820d5da3cd4f61d