DRDS异构索引测试

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 一、   概述 对于DRDS的数据库的分表查询时SQL中的where条件尽量会带上分库分表键这样DRDS会将这个查询路由到具体的分库中以提高查询效率。如果SQL的where条件中没有分库分表键DRDS会进行一次全表扫描。

一、   概述

对于DRDS的数据库的分表,查询时SQL中的where条件尽量会带上分库分表键,这样DRDS会将这个查询路由到具体的分库中,以提高查询效率。如果SQL的where条件中没有分库分表键,DRDS会进行一次全表扫描。针对这种场景,DRDS提供了异构索引来解决这个问题。异构索引会将源表数据实时同步到按照不同字段分库分表的目标表中,以达到使用不同的分库分表键查询数据都不会走全表扫描的目的。

典型的异构索引应用场景是电商网站的订单表,在DRDS中创建结构相同分表键不同的两张表,分别按照买家ID和卖家ID来分库分表,底层将数据实时的从源表同步到目标表,不同用户登录查询时去对应表中查找,避免全表扫描。

本文档将对DRDS的异构索引功能进行创建及测试。

二、   创建异构索引

目前公有云中的异构索引处于内测阶段,只能通过提交工单,由后台人员协助完成创建的方式来使用。需要先在DRDS中建好源表和目标表。本次测试模拟合同信息表来进行测试,对合同表分别创建按照甲方和乙方两个字段分库分表的两张表,contracts_a为源表,contracts_b为目标表。

2.1. 在DRDS中创建源表

CREATE TABLE `contracts_a` (

  `cid` int(11) NOT NULL DEFAULT '0',

  `party_a` varchar(50) DEFAULT NULL,

  `party_b` varchar(50) DEFAULT NULL,

  PRIMARY KEY (`cid`),

  KEY `auto_shard_key_party_a` (`party_a`),

  KEY `idx_a` (`party_a`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`party_a`) tbpartition by hash(`party_a`) tbpartitions 2;

2.2. 在DRDS中创建目标表

CREATE TABLE `contracts_b` (

  `cid` int(11) NOT NULL DEFAULT '0',

  `party_a` varchar(50) DEFAULT NULL,

  `party_b` varchar(50) DEFAULT NULL,

  PRIMARY KEY (`cid`),

  KEY `auto_shard_key_party_b` (`party_b`),

  KEY `idx_b` (`party_b`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`party_b`) tbpartition by hash(`party_b`) tbpartitions 2;

2.3. 提交工单创建异构索引

阿里云控制台—工单—提交工单—DRDS—在描述中写明源表和目标表,要求开通异构索引即可。

三、异构索引功能测试

1.     查看两表数据量

{}f5352956f10518985ef03e4ce38f45d5bf2125ec


2.     在源表插入数据,查看目标表同步情况

5398108bb179e7a68d1a97852bffc906f71e3fc5

3.     在两表中分别查看不重复的甲方值(contracts_a表是按照甲方party_a分库分表,因此contracts_a表查询效率更快)

35aa628087d3c6353ea713b994d2853f534324e0

4.     在两表中分别查看不重复的乙方值(contracts_b表是按照乙方party_b分库分表,因此contracts_b表查询效率更快)

71ac46abf8bd4f7724516fc22c305a0eb1d6e953

5.     在两表分别查询某甲方的记录数

4de2ac5396ec9f95103afbec4baf6bf77f847008

6.     在两表分别查询某乙方的记录数

54cecd7431be6cb6db5a17f8fc9d777400fc4dfc

四、结论

如以上测试结果,异构索引会自动将源表数据同步到目标表,并通过提供多种分表键来避免全表扫描,以加快查询速度。

相关实践学习
Polardb-x 弹性伸缩实验
本实验主要介绍如何对PolarDB-X进行手动收缩扩容,了解PolarDB-X 中各个节点的含义,以及如何对不同配置的PolarDB-x 进行压测。
目录
相关文章
|
6月前
|
SQL 缓存 关系型数据库
PolarDB-X 混沌测试实践:如何衡量数据库索引选择能力
随着PolarDB分布式版的不断演进,功能不断完善,新的特性不断增多,整体架构扩大的同时带来了测试链路长,出现问题前难发现,出现问题后难排查等等问题。原有的测试框架已经难以支撑实际场景的复杂模拟测试。因此,我们实现了一个基于业务场景面向优化器索引选择的混沌查询实验室,本文之后简称为CEST(complex environment simulation test)。
|
9月前
|
弹性计算 前端开发 关系型数据库
实践教程之使用PolarDB-X进行TP负载测试
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。本期实验将指导您如何使用PolarDB-X进行TP负载测试。
|
11月前
|
关系型数据库 大数据 测试技术
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(1)
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(1)
333 0
|
11月前
|
SQL 数据可视化 算法
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(2)
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(2)
225 0
|
11月前
|
测试技术 数据库连接 分布式数据库
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(3)
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(3)
221 0
|
11月前
|
存储 SQL 监控
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(4)
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(4)
218 0
|
11月前
|
弹性计算 负载均衡 分布式数据库
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(5)
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(5)
206 0
|
11月前
|
测试技术 数据库连接 分布式数据库
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(6)
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(6)
243 0
|
11月前
|
SQL Java 测试技术
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(7)
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(7)
200 0
|
11月前
|
弹性计算 监控 Java
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(8)
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(8)
213 0