表格存储最佳实践:使用多元索引加速 SQL 查询

本文涉及的产品
表格存储 Tablestore,50G 2个月
简介: 表格存储(Tablestore)在 2022 年 5 月正式发布了 SQL 商业化版本,业务上只需要在数据表上建立映射关系,就可以基于 SQL 引擎方便地对表格存储中的数据进行访问和计算,大大地降低了用户的学习成本。

表格存储(Tablestore)在 2022 年 5 月正式发布了 SQL 商业化版本,业务上只需要在数据表上建立映射关系,就可以基于 SQL 引擎方便地对表格存储中的数据进行访问和计算,大大地降低了用户的学习成本。下面以一个电商订单场景为例,介绍 SQL 的使用方式和加速策略。


场景介绍

某电商平台需要搭建订单管理系统,有一亿条订单明细数据保存在表格存储 Tablestore 的订单表 orders 中,用户创建了订单表的映射表,现需要通过 Tablestore SQL 来实现如下几个查询需求:


映射表结构

CREATETABLE `orders` (    `order_id` VARCHAR(1024) # 订单号,    `o_price` DOUBLE # 订单金额,    `o_time` BIGINT(20) # 下单时间,    `customer_name` MEDIUMTEXT # 顾客姓名,    `merchant_id` MEDIUMTEXT # 商家号,    `product_name` MEDIUMTEXT # 商品名,    PRIMARY KEY(`order_id`));

查询需求

  • 通过订单号查询订单。
  • 查询顾客一个月的购买记录。
  • 根据商品名检索订单。
  • 计算商家销售额排名。


无索引的 SQL 查询

当订单表 orders 上没有索引时使用 SQL 查询,SQL 引擎会采用 scan table + filter 的执行策略。

  1. 基于主键列的点查、范围查询,SQL 引擎扫描的数据量较小,返回速度较快,可以支持非常高的并发。例如上述订单场景的第一个查询需求,根据订单号 order_id 查询某一条订单明细。
select*from `orders` where order_id ='000017f7864f43608995f16e8a837b64'

  1. 当需要根据属性列字段来组合查询时,SQL 引擎扫描的数据会非常大,这会导致 SQL 查询性能下降,极端情况下可能会超过服务的限制,导致抛出 scan rows exceeds quota 错误。例如上述的第二查询需求,查询某顾客一个月内的购买记录,需要根据顾客姓名 customer_name 和下单时间 o_time 的范围来查询。SQL 引擎通过扫表的方式查询使得耗时急剧上升,如下示例:
select*from `orders` where customer_name ='顾客380'and o_time between1652688493000and1655366893782limit20;


基于多元索引的 SQL 查询


什么是多元索引

多元索引是建立数据表上的,采用倒排索引和列式存储等索引结构,提供了多字段组合查询、全文检索、地理位置查询等能力,同时可以支持轻量级的统计聚合。在数据表上建立多元索引后,SQL 引擎将自动选择最优的索引策略来大幅度提高查询性能,完全避免了 scan table 的查询方式带来的问题,同时能够支持更多的查询功能,例如全文检索。还是以上文的订单场景为例,来看看多元索引适用于哪些 SQL 查询场景。


创建多元索引

为了实现 SQL 查询加速和功能扩展,首先需要在 Tablestore 控制台上创建一个多元索引,多元索引创建后需要先等待表中的存量数据同步到索引中。


场景一:多字段组合查询

当需要使用多个属性列字段组合筛选数据时,利用多元索引的倒排索引特性,可以加速 SQL 语句的执行速度,避免整表扫描。例如查询顾客一个月的购买记录,可以看出同样的 SQL 查询耗时下降了 20 倍以上。

select*from `orders` where customer_name ='顾客380'and o_time between1652688493000and1655366893782limit20;


场景二:统计聚合

查询场景中需要对某个字段做聚合计算(Sum、Avg 等)或者按照某个字段进行分组时,SQL 引擎会利用多元索引的轻量级聚合能力。例如计算商家的销售额排名,需要按照商家号 merchant_id 分组并对订单金额 o_price 计算求和。

select merchant_id,sum(o_price)as sales from `orders` groupby merchant_id orderby sales desclimit3;


场景三:全文检索

全文检索是多元索引对 SQL 查询能力的扩展,当查询场景中需要对某个属性列的值进行全文检索,则需要依赖多元索引提供的分词和匹配查询功能。例如根据商品名检索订单,搜索商品名 product_name 中包含了 “笔” 的订单。

select*from `orders` where text_match(product_name,"笔","or","1")limit10;


总结

多元索引提供了在百亿数据规模下毫秒级检索的能力,当 SQL 查询场景中需要使用到多字段组合查询、统计聚合、全文检索等,通过在数据表上创建多元索引,能够带来极大的性能提升。更多关于 Tablestore SQL 的使用姿势和多元索引的功能介绍,欢迎参考表格存储 Tablestore 官方文档,或者加入“表格存储技术交流群 - 2”咨询,群内提供免费的在线专家服务,欢迎扫码加入,群号 23307953。

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
16天前
|
SQL 运维 监控
SQL查询太慢?实战讲解YashanDB SQL调优思路
本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
|
13天前
|
SQL 索引
【YashanDB知识库】字段加上索引后,SQL查询不到结果
【YashanDB知识库】字段加上索引后,SQL查询不到结果
|
13天前
|
SQL 大数据 数据挖掘
玩转大数据:从零开始掌握SQL查询基础
玩转大数据:从零开始掌握SQL查询基础
90 35
|
1月前
|
SQL 关系型数据库 分布式数据库
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
|
24天前
|
SQL 关系型数据库 OLAP
云原生数据仓库AnalyticDB PostgreSQL同一个SQL可以实现向量索引、全文索引GIN、普通索引BTREE混合查询,简化业务实现逻辑、提升查询性能
本文档介绍了如何在AnalyticDB for PostgreSQL中创建表、向量索引及混合检索的实现步骤。主要内容包括:创建`articles`表并设置向量存储格式,创建ANN向量索引,为表增加`username`和`time`列,建立BTREE索引和GIN全文检索索引,并展示了查询结果。参考文档提供了详细的SQL语句和配置说明。
35 1
|
10天前
|
SQL 缓存 关系型数据库
SQL为什么不建议执行多表关联查询
本文探讨了SQL中不建议执行多表关联查询的原因,特别是MySQL与PG在多表关联上的区别。MySQL仅支持嵌套循环连接,而不支持排序-合并连接和散列连接,因此在多表(超过3张)关联查询时效率较低。文章还分析了多表关联查询与多次单表查询的效率对比,指出将关联操作放在Service层处理的优势,包括减少数据库计算资源消耗、提高缓存效率、降低锁竞争以及更易于分布式扩展等。最后,通过实例展示了如何分解关联查询以优化性能。
|
1月前
|
SQL 数据可视化 IDE
SQL做数据分析的困境,查询语言无法回答的真相
SQL 在简单数据分析任务中表现良好,但面对复杂需求时显得力不从心。例如,统计新用户第二天的留存率或连续活跃用户的计算,SQL 需要嵌套子查询和复杂关联,代码冗长难懂。Python 虽更灵活,但仍需变通思路,复杂度较高。相比之下,SPL(Structured Process Language)语法简洁、支持有序计算和分组子集保留,具备强大的交互性和调试功能,适合处理复杂的深度数据分析任务。SPL 已开源免费,是数据分析师的更好选择。
|
存储 索引
表格存储根据多元索引查询条件直接更新数据
表格存储是否可以根据多元索引查询条件直接更新数据?
139 3
|
8月前
|
DataWorks NoSQL 关系型数据库
DataWorks产品使用合集之如何从Tablestore同步数据到MySQL
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
10月前
|
分布式计算 DataWorks API
DataWorks常见问题之按指定条件物理删除OTS中的数据失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。

热门文章

最新文章