全部产品
Search
文档中心

表格存储:使用SQL查询数据时如何选择查询方式

更新时间:Sep 10, 2024

使用SQL查询数据时,您可以通过表的映射关系或者多元索引的映射关系进行数据查询,请根据实际场景选择合适的查询方式。

背景信息

表格存储作为结构化大数据存储,支持不同的索引结构,便于在不同场景的查询分析加速使用。索引结构包括通过数据表主键进行的单行读(GetRow)和范围读(GetRange)、自定义配置主键的二级索引表以及支持倒排索引和多维空间索引的多元索引。

使用SQL查询功能时,您可以通过显式访问二级索引表查询数据。对于多元索引,表格存储提供了自动多元索引选择策略和显式访问多元索引两种方式查询数据。更多信息,请参见索引选择策略

样例场景

假设数据表exampletable包括主键列id(整型)以及属性列name(String类型)和context(String类型),且已为该数据表创建了多元索引exampletable_searchindex,该多元索引包括id(Integer类型)和context(Text类型)两列。

本文以该样例场景为例介绍通过SQL使用不同索引结构进行数据查询的实践操作。

使用表的映射关系

请根据实际场景选择合适的使用方式。使用表的映射关系时支持设置数据是否要满足强一致性以及是否允许牺牲统计聚合精准度来提升查询性能。

说明

关于创建表的映射关系的更多信息,请参见创建表的映射关系

方式一:查询数据时要求数据满足最终一致,且允许牺牲统计聚合精准度

  1. 为数据表exampletable创建映射关系,映射表名称为exampletable,其他参数保持默认即可。

    CREATE TABLE `exampletable` (`id` BIGINT, `name` MEDIUMTEXT, `context` MEDIUMTEXT, PRIMARY KEY(id)) ENGINE='Tablestore';
  2. 查询数据。

    当执行以下SQL语句查询数据时,由于id、name和context未全部包括在多元索引exampletable_searchindex中,因此表格存储会自动选择数据表进行数据查询。

    SELECT * FROM exampletable LIMIT 10;

    当执行以下SQL语句查询数据时,由于id和context均包括在多元索引exampletable_searchindex中,因此表格存储会自动选择该多元索引进行数据查询。

    SELECT id,context FROM exampletable LIMIT 10;

方式二:查询数据时要求保证数据强一致性

  1. 为数据表exampletable创建映射关系,映射表名称为exampletable以及设置data_consistency为strong。

    CREATE TABLE `exampletable` (`id` BIGINT, `name` MEDIUMTEXT, `context` MEDIUMTEXT, PRIMARY KEY(id)) ENGINE='Tablestore', ENGINE_ATTRIBUTE='{"data_consistency": "strong"}';
  2. 查询数据。更多信息,请参见查询数据

    由于多元索引是满足数据最终一致,并不保证强一致性,因此表格存储不会通过任何多元索引进行数据查询。

方式三:查询数据时要求数据满足最终一致,但不允许牺牲统计聚合精准度

  1. 为数据表exampletable创建映射关系,映射表名称为exampletable,设置data_consistency为eventual以及设置allow_inaccurate_aggregation为false。

    CREATE TABLE `exampletable` (`id` BIGINT, `name` MEDIUMTEXT, `context` MEDIUMTEXT, PRIMARY KEY(id)) ENGINE='Tablestore', ENGINE_ATTRIBUTE='{"data_consistency": "eventual", "allow_inaccurate_aggregation": false}';
  2. 查询数据。更多信息,请参见查询数据

    由于多元索引的统计聚合操作非绝对精确的结果,因此表格存储不会选择任何多元索引进行数据查询。

使用多元索引的映射关系

当要使用指定多元索引进行数据查询时,您可以通过为该多元索引创建映射关系来实现。

说明

关于创建多元索引的映射关系的更多信息,请参见创建多元索引的映射关系

  1. 创建多元索引的映射关系,映射表名称为exampletable_searchindex_test。

    CREATE TABLE `exampletable_searchindex_test` (`id` BIGINT, `context` MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable_searchindex", "table_name": "exampletable"}'
  2. 查询数据。

    SELECT id,context FROM exampletable_searchindex_test WHERE text_match(context, "tablestore cool") LIMIT 10;