多索引是表格存储产品的一个重要功能。Multi-index使用倒排索引技术,为TableStore提供非主键列的快速检索功能,同时也提供统计聚合功能。表格存储最近发布了SQL查询功能。SQL引擎默认从原表读取数据,非主键列的查询需要扫描全表。启用多索引后,如果一个查询过滤条件或统计聚合可以下推到多索引执行,SQL引擎会将部分查询计划转换为多索引请求,从中获取数据多索引提高查询效率。1多索引SQL运算符支持1前提条件在使用SQL查询多索引之前,首先需要在表上创建多索引。如果多索引中包含SQL语句涉及的数据列,则SQL引擎通过多索引读取数据,将多索引支持的算子下推。比如有一张表exampletable,有a、b、c、d四列,多索引有b、c、d三列。只有当SQL语句只涉及b、c、d中的数据列时,才会从Multivariate索引中选择读取数据。SELECTa,b,c,dFROMexampletable;/*多索引不包含a,b,c,d,扫描全表读取数据,不支持运算符下推*/SELECTb,c,dFROMexampletable;/*多索引包含b,c,d,通过多元素索引读取数据,支持运算符下推*/2支持下推运算符表存储支持WHERE语句中的部分逻辑运算符和关系运算符下推,以及聚合函数和LIMIT运算符下推。2多索引SQL查询实践为了直观演示SQL查询多索引功能,下面将以某自行车租赁公司的订单表为例,利用多索引上的SQL功能完成一些简单的操作查询和分析任务。某自行车租赁公司的订单表单如下:整个表单称为trips,每张租车订单都有一个唯一的订单号作为主键,订单记录了租赁时间、开始日期、结束日期、开始地点、端点等。该表包含120万行数据。如果在没有启用多索引的情况下统计表行数,会因为超出扫描配额限制而终止查询。同样,如果以非主键列作为查询条件进行查询,也会因为涉及到全表扫描,超出扫描配额而被终止。为了能够根据非主键列的值进行查询和统计聚合,需要创建一个覆盖所有数据列的多元素索引。对于数据量比较大的表,等待多索引同步完成的时间比较长。1下推过滤条件启用多元素索引后,可以对非主键列进行条件查询。例如下图查询从起点编号31208到起点编号31209的租车订单,SQL引擎在多个索引的帮助下,可以在500毫秒内查询出全表满足条件的140行记录。多元素索引支持多个条件的组合,比如查询站点312082010年10月1日的订单,由于国外10月1日不放假,所以当天的订单量不是很大。2统计聚合下推除了非主键列查询,多元素索引还提供了强大的统计聚合能力。不创建多元索引无法统计行数,但有了多元索引,可以在500毫秒左右查询到行数、站点数、平均租车时间等信息。同样,群组统计聚合也可以快速得到结果,比如列出每个站点的总订单数。过滤条件和统计聚合可以结合使用,比如查询2010年10月1日各站点的订单数。3TopN将包含ORDERBY和LIMIT的SQL语句下推成为TopN查询。多索引支持TopN的快速查询。图中的查询显示了最新的10条数据。
