索引选择

本文为您介绍如何选择表格存储的查询方式以及索引常见组合方案。

无需使用索引

以下情况您可以不使用索引进行数据查询。

  • 如果基于主键和主键范围查询的功能已经可以满足业务需求,则不需要建立索引。更多信息,请参见读取数据

  • 如果对某个范围内进行筛选,范围内数据量不大或者查询频率不高,则可以使用Filter功能,不需要建立索引。更多信息,请参见过滤器

  • 如果是某种复杂查询,执行频率较低且对延迟不敏感,则可以通过SQL查询表中的数据。更多信息,请参见查询数据

索引介绍

表格存储提供了二级索引和多元索引用于加速数据查询。

二级索引

一个二级索引是一个索引表,类似于数据表,其提供了另一种数据分布方式或者认为是另一种主键排序方式。一个索引对应一种查询条件,预先将符合查询条件的数据排列在一起,查询效率很高,适合固定维度的查询。索引表可支撑的数据规模与数据表相同,此外,二级索引的主键设计也同样需要考虑散列问题。更多信息,请参见二级索引简介

表格存储提供了全局二级索引和本地二级索引两种类型的索引。全局二级索引以异步方式将数据表中被索引的列和主键列的数据自动同步到索引表中,正常情况下同步延迟达到毫秒级别。

为了满足用户的强一致性查询等需求,表格存储推出了本地二级索引。本地二级索引以同步方式将数据表中被索引的列和主键列的数据自动同步到索引表中,当数据写入数据表后,即可从索引表中查询到数据。

全局二级索引和本地二级索引在同步方式、对第一列主键要求、同步延迟和读取一致性方面的区别请参见下表说明。

维度

全局二级索引

本地二级索引

同步方式

异步方式

同步方式

第一列主键要求

可选数据表中的任意主键列或者预定义列

必须和数据表的第一列主键相同

同步延迟

毫秒级别

实时

读取一致性

最终一致性

强一致性

多元索引

一个多元索引是一系列数据结构的组合,其中的每一列都支持建立倒排索引等结构。查询数据时可以按照其中任意一列进行排序。一个多元索引可以支持多种查询条件,不需要对不同查询条件建立多个多元索引。更多信息,请参见多元索引简介

相比二级索引,多元索引还支持多条件组合查询、模糊查询、全文索引、地理位置查询等。多元索引本质上是通过各种数据结构加快了数据的筛选过程,功能丰富,但在数据按照某种固定顺序读取的场景上效率不如二级索引。多元索引的查询效率与倒排链长度等因素相关,即查询性能与整个表的全量数据规模有关,在数据规模达到百亿行以上时,建议使用路由键(RoutingKey)对数据进行分片,查询数据时通过指定RoutingKey查询来减少查询涉及到的数据量。

多元索引适合如下场景:

  • 需要对查询做任意组合

  • 需要有OR的查询,例如X=a OR X=b的场景

  • 需要GEO地理位置查询

  • 需要对字符串分词查询

索引对比

二级索引和多元索引的对比说明请参见下表。

对比项

二级索引

多元索引

查询灵活度

只可使用创建索引时指定的索引组合进行查询。如需其他组合需创建新的索引表

可对索引字段做任意组合查询

查询性能

通过索引键可定位到对应的分片,性能佳

需要查询所有的分片

大范围扫描

支持,性能与表引擎一致

支持,但性能低于表引擎及二级索引

数据可见延迟

  • 全局二级索引:毫秒级

  • 本地二级索引:实时

秒级

分词查询

不支持

支持

GEO地理位置查询

不支持

支持

数据一致性

  • 全局二级索引:最终一致

  • 本地二级索引:强一致性

最终一致

常见索引组合方案

每个业务都希望具备丰富的数据查询功能,但是在数据规模很大时,灵活的查询意味着较高的成本。例如万亿行数据的规模,使用表引擎,成本低;建立多元索引,查询灵活但是费用较高;建立二级索引,成本较低但是只适合固定维度的查询。

常见的超大规模数据都带有一些时间属性,例如大量设备产生的数据(监控数据)或者人产生的数据(消息、行为数据等),这类数据非常适合采用表格存储进行存储。针对这类数据建立索引的组合方案如下:

  • 对元数据表建立多元索引,全量数据表不建立索引或采用二级索引。

    元数据表一般是产生数据的主体表,例如设备信息表、用户信息表等。在时序模型中,产生数据的主体也可以认为是一个时间线,这条时间线会不断产生新的点。

  • 对热数据建立多元索引,冷数据不建立索引或者采用二级索引。

    很多情况下仅需要对非常热的数据进行多种维度查询,对冷数据采取固定维度查询(二级索引)即可。冷热数据分离可以给业务提供更高的性价比。

    目前多元索引支持TTL,您可以通过多元索引TTL实现热数据和冷数据的区分。更多信息,请参见多元索引生命周期管理

技术支持

表格存储为您提供专业的免费的技术咨询服务,欢迎通过钉钉加入相应交流群。

  • 为互联网应用、大数据、社交应用等开发者提供的最新技术交流群有表格存储技术交流群-3

    说明

    表格存储用户群11789671(表格存储技术交流群)和23307953(表格存储技术交流群-2)已满,暂时无法加入。

    2e182faaf86c8352cb6fc99bd6371fb4.jpg

  • 为物联网和时序模型开发者提供的技术交流群有44327024(物联网存储 IoTstore 开发者交流群)。

    be4365aa89c9377dd75d4b52b60d7144.jpg