简介:多元索引是表格存储产品中一个重要的性能,多元索引应用倒排索引技术为表格存储提供了非主键列上的疾速检索性能,另外也提供了统计聚合性能。表格存储近期凋谢了 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 条数据。
原文链接
本文为阿里云原创内容,未经容许不得转载。