全部產品
Search
文件中心

Tablestore:使用SQL查詢存在資料延遲問題

更新時間:Jan 11, 2025

問題現象

在新增或更新資料後,使用SQL查詢資料時無法立即擷取最新資料,存在一定的延遲現象。

可能原因

在為資料表建立多元索引後,使用SQL查詢資料時,如果多元索引包含SQL中涉及的所有資料列,則SQL引擎將自動選擇該多元索引進行資料查詢。更多資訊,請參見索引選擇策略

而多元索引中的資料可能存在同步延遲,因此即使資料已成功寫入資料表,SQL查詢仍可能無法返回最新的結果。

解決方案

  • SQL顯式指定不使用索引

    使用SQL查詢資料時,在SQL語句中使用use index()命令顯式指定執行查詢時不考慮優先使用索引。

    例如資料表exampletablepknamecontext三個資料列,並且已建立包含這三個資料列的多元索引。查詢資料時指定不使用索引的SQL樣本如下。

    SELECT pk,name,context FROM exampletable use index();  -- 指定查詢資料表時不考慮優先使用索引。
  • 使用資料讀取介面查詢資料

    如果您需要使用主鍵讀取資料,您也可以使用資料讀取介面。Table Store提供了GetRow介面用於讀取單行資料以及BatchGetRow、GetRange等介面用於讀取多行資料。更多資訊,請參見讀取資料

    介面

    說明

    適用情境

    GetRow

    根據指定的主鍵讀取單行資料。

    適用於能確定完整主鍵且要讀取行數較少的情境。

    BatchGetRow

    批量讀取一個表或多個表中的若干行資料。

    適用於能確定完整主鍵,且需要讀取行數較多或者要讀取多個表中資料的情境。

    GetRange

    讀取指定主鍵範圍內的資料。

    適用於能確定完整主鍵範圍或者主鍵首碼的情境。

  • 使用二級索引

    重要

    使用二級索引功能將產生額外的資料存放區量。當向資料表寫入資料時,建立索引和讀取資料均會消耗計算資源。

    您可以選擇在執行SQL查詢資料時使用二級索引。具體操作如下:

    1. 為資料表建立二級索引。具體操作,請參見通過控制台使用二級索引

      推薦使用本地二級索引,以滿足強一致性查詢的要求。

    2. 您可以通過以下兩種方式,在執行SQL查詢資料時使用二級索引。

      例如資料表exampletablepknamecontext三個資料列,資料表的二級索引為exampletable_index,並且該索引包含這三個資料列。

      • 方式一:查詢資料表時顯式指定使用二級索引

        執行SQL進行資料查詢時,如果未顯式指定索引,Table Store會根據索引選擇策略自動選擇是否使用索引。

        通過use index()命令顯式指定使用二級索引的SQL樣本如下。

        SELECT pk,name,context FROM exampletable use index(exampletable_index);  -- 顯式指定查詢資料表時使用二級索引。
      • 方式二:查詢二級索引映射表

        1. 通過CREATE TABLE語句建立二級索引的映射表exampletable_index。具體操作,請參見建立表的映射關係

        2. 執行SELECT語句查詢二級索引映射表的SQL樣本如下。

          SELECT pk,name,context FROM exampletable_index;  -- 指定查詢二級索引的映射表。