问题现象
在新增或更新数据后,使用SQL查询数据时无法立即获取最新数据,存在一定的延迟现象。
可能原因
在为数据表创建多元索引后,使用SQL查询数据时,如果多元索引包含SQL中涉及的所有数据列,则SQL引擎将自动选择该多元索引进行数据查询。更多信息,请参见索引选择策略。
而多元索引中的数据可能存在同步延迟,因此即使数据已成功写入数据表,SQL查询仍可能无法返回最新的结果。
解决方案
SQL显式指定不使用索引
使用SQL查询数据时,在SQL语句中使用
use index()
命令显式指定执行查询时不考虑优先使用索引。例如数据表
exampletable
有pk
、name
和context
三个数据列,并且已创建包含这三个数据列的多元索引。查询数据时指定不使用索引的SQL示例如下。SELECT pk,name,context FROM exampletable use index(); -- 指定查询数据表时不考虑优先使用索引。
使用数据读取接口查询数据
如果您需要使用主键读取数据,您也可以使用数据读取接口。表格存储提供了GetRow接口用于读取单行数据以及BatchGetRow、GetRange等接口用于读取多行数据。更多信息,请参见读取数据。
接口
说明
适用场景
根据指定的主键读取单行数据。
适用于能确定完整主键且要读取行数较少的场景。
批量读取一个表或多个表中的若干行数据。
适用于能确定完整主键,且需要读取行数较多或者要读取多个表中数据的场景。
读取指定主键范围内的数据。
适用于能确定完整主键范围或者主键前缀的场景。
使用二级索引
重要使用二级索引功能将产生额外的数据存储量。当向数据表写入数据时,建立索引和读取数据均会消耗计算资源。
您可以选择在执行SQL查询数据时使用二级索引。具体操作如下:
为数据表创建二级索引。具体操作,请参见通过控制台使用二级索引。
推荐使用本地二级索引,以满足强一致性查询的要求。
您可以通过以下两种方式,在执行SQL查询数据时使用二级索引。
例如数据表
exampletable
有pk
、name
和context
三个数据列,数据表的二级索引为exampletable_index
,并且该索引包含这三个数据列。方式一:查询数据表时显式指定使用二级索引
执行SQL进行数据查询时,如果未显式指定索引,表格存储会根据索引选择策略自动选择是否使用索引。
通过
use index()
命令显式指定使用二级索引的SQL示例如下。SELECT pk,name,context FROM exampletable use index(exampletable_index); -- 显式指定查询数据表时使用二级索引。
方式二:查询二级索引映射表
通过
CREATE TABLE
语句创建二级索引的映射表exampletable_index
。具体操作,请参见创建表的映射关系。执行
SELECT
语句查询二级索引映射表的SQL示例如下。SELECT pk,name,context FROM exampletable_index; -- 指定查询二级索引的映射表。