表格存储最佳实践:使用多元索引加速 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
目录
相关文章
|
1月前
|
SQL 安全 数据库
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
141 77
|
26天前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
45 17
|
21天前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
28天前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
91 6
|
2月前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
109 9
|
存储 索引
表格存储根据多元索引查询条件直接更新数据
表格存储是否可以根据多元索引查询条件直接更新数据?
129 3
|
SQL NoSQL 数据可视化
玩转Tablestore:使用Grafana快速展示时序数据
Grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,可以通过将采集的数据查询然后可视化的展示,实现报警通知;Grafana拥有丰富的数据源,官方支持以下数据源:Graphite,Elasticsearch,InfluxDB,Prometheus,Cloudwatch,MySQ
1795 0
玩转Tablestore:使用Grafana快速展示时序数据
|
7月前
|
DataWorks NoSQL 关系型数据库
DataWorks产品使用合集之如何从Tablestore同步数据到MySQL
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
9月前
|
分布式计算 DataWorks API
DataWorks常见问题之按指定条件物理删除OTS中的数据失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
9月前
|
DataWorks NoSQL 关系型数据库
可以使用dataworks从tablestore同步数据到mysql吗?
可以使用dataworks从tablestore同步数据到mysql吗?
92 1

热门文章

最新文章