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开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
目录
相关文章
|
监控 NoSQL 前端开发
|
4月前
|
存储 算法 Cloud Native
【PolarDB-X列存魔法】揭秘TPC-H测试背后的性能优化秘籍!
【8月更文挑战第25天】阿里巴巴的云原生数据库PolarDB-X以其出色的性能、可靠性和扩展性闻名,在多种业务场景中广泛应用。尤其在列存储模式下,PolarDB-X针对分析型查询进行了优化,显著提升了数据读取效率。本文通过TPC-H基准测试探讨PolarDB-X列存执行计划的优化策略,包括高效数据扫描、专用查询算法以及动态调整执行计划等功能,以满足复杂查询的需求并提高数据分析性能。
107 1
|
7月前
|
关系型数据库 MySQL 数据库
测试部署PolarDB-X 分布式与集中式
在本文中,作者详述了在CentOS 7.9上部署测试PolarDB-X分布式与集中式数据库的过程。PolarDB-X作为阿里云优化的分布式数据库,提供高稳定性和与MySQL的兼容性,是应对单体数据库扩展性和性能瓶颈的解决方案,同时也符合国产化需求。文章介绍了部署环境准备,包括关闭防火墙和SELinux,设置系统参数,安装Python3和Docker,以及配置MySQL客户端。接着,通过PXD工具部署了PolarDB-X的集中式和分布式版,遇到的问题包括阿里云镜像源异常导致的部署失败以及指定版本安装的困扰。最后,作者进行了初步的压力测试,并对文档完善、生态工具建设以及提供更多使用案例提出了建议。
47969 10
测试部署PolarDB-X 分布式与集中式
|
6月前
|
SQL 存储 关系型数据库
MySQL存储过程——Baidu Comate智能代码助手添加20条DML语句——测试索引效果
MySQL存储过程——Baidu Comate智能代码助手添加20条DML语句——测试索引效果
44 0
|
7月前
|
存储 关系型数据库 分布式数据库
PolarDB-X最佳实践系列(五):使用通义千问和存储过程快速生成测试数据
我们在测试数据库性能的过程中,通常需要生成一批测试数据。 以前,一般要写一段程序或者脚本来完成这项工作,但现在是2024年啦!时代变了!
PolarDB-X最佳实践系列(五):使用通义千问和存储过程快速生成测试数据
|
SQL 缓存 关系型数据库
PolarDB-X 混沌测试实践:如何衡量数据库索引选择能力
随着PolarDB分布式版的不断演进,功能不断完善,新的特性不断增多,整体架构扩大的同时带来了测试链路长,出现问题前难发现,出现问题后难排查等等问题。原有的测试框架已经难以支撑实际场景的复杂模拟测试。因此,我们实现了一个基于业务场景面向优化器索引选择的混沌查询实验室,本文之后简称为CEST(complex environment simulation test)。
|
弹性计算 前端开发 关系型数据库
实践教程之使用PolarDB-X进行TP负载测试
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。本期实验将指导您如何使用PolarDB-X进行TP负载测试。
|
关系型数据库 大数据 测试技术
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(1)
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(1)
382 0
|
SQL 数据可视化 算法
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(2)
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(2)
247 0
|
测试技术 数据库连接 分布式数据库
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(3)
《PolarDB-X开源分布式数据库实战进阶》——对PolarDB-X进行TP负载测试(3)
253 0