表格存储 SQL 查询多元索引
简介: 多元索引是表格存储产品中一个重要的功能,多元索引使用倒排索引技术为表格存储提供了非主键列上的快速检索功能,另外也提供了统计聚合功能。表格存储近期开放了SQL查询功能,SQL引擎默认从原始表格中读取数据,非主键列上的查询需要扫描全表。
作者 | 政豪
来源 | 阿里技术公众号
多元索引是表格存储产品中一个重要的功能,多元索引使用倒排索引技术为表格存储提供了非主键列上的快速检索功能,另外也提供了统计聚合功能。表格存储近期开放了SQL查询功能,SQL引擎默认从原始表格中读取数据,非主键列上的查询需要扫描全表。开启了多元索引之后,如果一个查询的过滤条件或者统计聚合可以下推至多元索引执行,那么SQL引擎将部分查询计划转换为多元索引请求,将从多元索引中获取数据,提高查询效率。
一 多元索引SQL算子支持
1 前提条件
在使用SQL查询多元索引之前,首先需要在表格上创建多元索引。如果多元索引包含SQL语句中涉及的数据列,则SQL引擎会通过多元索引读取数据并下推多元索引支持的算子。例如有一张表exampletable有a, b, c, d四列,多元索引中包含了b, c, d三列,只有当SQL语句中只涉及b, c, d中的数据列时,才会从多元索引读取数据。
SELECT a, b, c, d FROM exampletable; /* 多元索引不包含a,b,c,d,扫描全表读取数据,不支持算子下推 */
SELECT b, c, d FROM exampletable; /* 多元索引包含b,c,d,通过多元索引读取数据,支持算子下推 */

2 支持下推的算子
二 多元索引SQL查询实战
为了直观地展示SQL查询多元索引功能,下文将以某自行车租赁商的订单表为例,使用多元索引上的SQL功能完成一些简单的查询分析任务。某自行车租赁商的订单表如下:
整张表格名为trips,每一笔租车订单都有唯一的订单号作为主键,订单中记录了租车时长、开始日期、结束日期、开始站点、结束站点等信息。表格中包含120万行数据,在没有开启多元索引的情况下对表格行数进行统计,查询会因为超出扫描配额限制而终止。
同样地,如果以非主键列作为查询条件进行查询,也会因为涉及全表扫描超过扫描配额而被终止。
为了能够根据非主键列的值进行查询以及统计聚合,需要创建覆盖全部数据列的多元索引。对于数据量比较大的表格,需要较长的时间等待多元索引同步完成。
1 过滤条件下推
在开启多元索引之后,即可在非主键列上进行条件查询。例如,下图查询起点编号31208到起点编号31209的租车订单,借助多元索引,SQL引擎能够在500毫秒之内查询到全表中满足条件的140行记录。
多元索引支持多个条件的组合,例如查询2010年10月1日当天,站点31208的订单。由于外国10月1日不放假,那天的订单数量并不是很多。
2 统计聚合下推
除了非主键列查询,多元索引还提供了强大的统计聚合能力。在未创建多元索引的时候无法统计行数,但是有了多元索引,能在500毫秒左右查询到行数、站点数、平均租车时长等信息。
同样地,分组统计聚合也可以快速获取结果,例如列出每个站点总订单数目。
过滤条件和统计聚合可以一起使用,例如查询2010年10月1日当天每个站点订单数目。
3 TopN下推
SQL中包含ORDER BY和LIMIT的语句成为TopN查询,多元索引支持快速查询TopN,图中的查询展示了最近的10条数据。
本文为阿里云原创内容,未经允许不得转载。
表格存储 SQL 查询多元索引的更多相关文章
- 只需一步,DLA开启TableStore多元索引查询加速!
一.背景介绍 Data Lake Analytics(简称DLA)在构建第一天就是支持直接关联分析Table Store(简称OTS)里的数据,实现存储计算分离架构,满足用户基于SQL接口分析Tabl ...
- 索引 使用use index优化sql查询
好博客:MySQL http://webnoties.blog.163.com/blog/#m=0&t=1&c=fks_08407108108708107008508508609508 ...
- sql查询调优之where条件排序字段以及limit使用索引的奥秘
奇怪的慢sql 我们先来看2条sql 第一条: select * from acct_trans_log WHERE acct_id = 1000000000009000757 order b ...
- T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他
简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...
- SQL存储原理及聚集索引、非聚集索引、唯一索引、主键约束的关系(补)
索引类型 1. 唯一索引:唯一索引不允许两行具有相同的索引值 2. 主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型.主键索引要求主键中的 ...
- T-SQL查询进阶--理解SQL Server中索引的概念,原理
简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,sql server仍然可以实现应有的功能,但索引可以在大多数情况下提升查询性能,在OLAP(On line Trans ...
- 【转】同一个SQL查询语句,为什么使用到的索引不同?
问: 同一个SQL查询语句,只是修改where条件中的一个值,为什么使用到的索引情况也会不同?谢谢! 1) explain执行结果,如下图: 2) 表中的数据如下图: 3) 表结构如下图: 4) 创建 ...
- sql查询未走索引问题分析之查询数据量过大
前因: 客户咨询,有一个业务sql(代表经常被执行且重要),全表扫描在系统占用资源很高(通过ash报告查询得到信息) 思路: 1.找到sql_text,sql_id 2.查看执行计划 3.查询sql涉 ...
- sql server 表变量存储临时查询数据
对于使用sql server 编写存储过程或者类似的sql 查询的时候我们使用表变量进行临时数据的存储,可以方便我们进行下来的数据处理 表变量的使用类似如下: declare @userinfo ta ...
- MySQL 基本语法(1.表字段操作,2表记录管理 3.运算符管理4.SQL查询 5.约束6.索引
.表字段的操作 .语法:alter table 表名 执行动作; .添加字段(add) .添加到末尾 alter table 表名 add 字段名 数据类型; .添加到第一列 alter table ...
随机推荐
- 编译OpenWRT-for-MT7620A(带8021x验证)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- MySQL(初识数据库)
一 存储数据的演变过程 随意的存在一个文件中.数据格式也是千差万别的完全取决于我们自己 软件开发目录规范 限制了存储数据的具体位置 ''' bin conf core lib db readme.tx ...
- ElasticSearch - 基础概念和映射
前言 写这篇东西,是因为官方文档看着太痛苦,于是乎想用大白话来聊聊 ElasticSearc (下面都简称ES).所以下文对于 ES 一些概念的表述可能会与官方有出入,所以需要准确的表述和详细定义的, ...
- web前端工程化合集
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.Git 1. git 和 svn 的区别 git 和 svn 最大的区别在于 git 是分布式的,而 svn 是集中式的.因此我们不能 ...
- re_signin 【ctfshow_元旦水友赛】Reserve
题目: IDA反编译 主函数 1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 char s2[144] ...
- CentOS 7.6 防火墙打开、关闭,端口开启、关闭
查看CentOS版本 cat /etc/redhat-release 显示系统名.节点名称.操作系统的发行版号.操作系统版本.运行系统的机器 ID 号. uname -a 防火墙命令 #查询防火墙状态 ...
- vue项目,关闭eslint语法检测
vue.config.js文件中 module.exports = { lintOnSave:false //关闭语法检查 } 然后重启项目生效!
- linux 安装mysql8.0.11
1.使用系统的root账户 2.切换到/use/local 目录下 3.下载mysql ?wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysq ...
- swagger的使用及配置
引入坐标 <!--swagger--> <dependency> <groupId>io.springfox</groupId> <artifac ...
- YOLOv1/v2/v3简述 | 目标检测
YOLO系列是目标检测领域里十分经典的结构,虽然目前已经出了很多更高质量更复杂的网络,但YOLO的结构依然可以给算法工程师们带来很多的启发.这3篇论文看下来,感觉像是一本调参说明书,教你如何使用各种t ...