問題現象
在新增或更新資料後,使用SQL查詢資料時無法立即擷取最新資料,存在一定的延遲現象。
可能原因
在為資料表建立多元索引後,使用SQL查詢資料時,如果多元索引包含SQL中涉及的所有資料列,則SQL引擎將自動選擇該多元索引進行資料查詢。更多資訊,請參見索引選擇策略。
而多元索引中的資料可能存在同步延遲,因此即使資料已成功寫入資料表,SQL查詢仍可能無法返回最新的結果。
解決方案
SQL顯式指定不使用索引
使用SQL查詢資料時,在SQL語句中使用
use index()
命令顯式指定執行查詢時不考慮優先使用索引。例如資料表
exampletable
有pk
、name
和context
三個資料列,並且已建立包含這三個資料列的多元索引。查詢資料時指定不使用索引的SQL樣本如下。SELECT pk,name,context FROM exampletable use index(); -- 指定查詢資料表時不考慮優先使用索引。
使用資料讀取介面查詢資料
如果您需要使用主鍵讀取資料,您也可以使用資料讀取介面。Table Store提供了GetRow介面用於讀取單行資料以及BatchGetRow、GetRange等介面用於讀取多行資料。更多資訊,請參見讀取資料。
介面
說明
適用情境
根據指定的主鍵讀取單行資料。
適用於能確定完整主鍵且要讀取行數較少的情境。
批量讀取一個表或多個表中的若干行資料。
適用於能確定完整主鍵,且需要讀取行數較多或者要讀取多個表中資料的情境。
讀取指定主鍵範圍內的資料。
適用於能確定完整主鍵範圍或者主鍵首碼的情境。
使用二級索引
重要使用二級索引功能將產生額外的資料存放區量。當向資料表寫入資料時,建立索引和讀取資料均會消耗計算資源。
您可以選擇在執行SQL查詢資料時使用二級索引。具體操作如下:
為資料表建立二級索引。具體操作,請參見通過控制台使用二級索引。
推薦使用本地二級索引,以滿足強一致性查詢的要求。
您可以通過以下兩種方式,在執行SQL查詢資料時使用二級索引。
例如資料表
exampletable
有pk
、name
和context
三個資料列,資料表的二級索引為exampletable_index
,並且該索引包含這三個資料列。方式一:查詢資料表時顯式指定使用二級索引
執行SQL進行資料查詢時,如果未顯式指定索引,Table Store會根據索引選擇策略自動選擇是否使用索引。
通過
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; -- 指定查詢二級索引的映射表。