全部產品
Search
文件中心

Tablestore:使用GetRange介面查詢資料時返回指定範圍外的資料

更新時間:May 01, 2026

GetRange 範圍查詢結果超出指定範圍,通常是因為查詢條件不符合最左首碼匹配規則。建立二級索引調整主鍵順序後,再對索引執行範圍查詢即可解決。

問題現象

在控制台範圍查詢、SDK 範圍查詢、OTS 外部表格查詢、OTSReader 資料同步等情境中,使用GetRange介面查詢資料時,返回的結果與查詢條件中設定的範圍不一致。

可能原因

查詢條件不符合最左首碼匹配規則。

Tablestore 按照表結構中定義的主鍵列順序對資料進行物理排序儲存。因此,只有當左側主鍵列的起止範圍確定(即為精確值)時,右側主鍵列上設定的範圍條件才會生效;一旦左側主鍵列使用了範圍(非精確值),右側主鍵列的範圍條件將被忽略。

重要

最左首碼匹配規則:有效與無效情境

  • 有效:第一主鍵列設定精確值,第二主鍵列設定範圍——查詢結果僅包含第二主鍵列滿足該範圍的行。

  • 無效:第一主鍵列設定範圍,第二主鍵列設定精確值或範圍——第二主鍵列的條件被忽略,實際查詢範圍由第一主鍵列決定。

例如,將第一主鍵列起始主鍵和結束主鍵分別設定為beginPrimaryKey = INF_MINendPrimaryKey = INF_MAX,同時將第二主鍵列起始主鍵和結束主鍵分別設定為beginPrimaryKey = 10endPrimaryKey = 10,則返回全表資料,而非第二主鍵列等於 10 的行。原因是第一主鍵列的範圍覆蓋整個鍵空間,導致第二主鍵列的條件無效。

解決方案

建立二級索引,將目標過濾列調整為最左主鍵,再直接對二級索引執行範圍查詢。無需修改原始表結構,即可實現精確的範圍過濾。

根據實際情境選擇對應的操作方式:

  • 控制台範圍查詢或SDK範圍查詢:不使用二級索引時,只能掃描全表後在用戶端過濾,效率低。使用二級索引後,可直接對索引執行範圍查詢,避免全表掃描。具體操作,請分別參見通過控制台使用二級索引通過SDK使用二級索引

  • OTS 外部表格查詢:在外部表格的建表 SQL 中,將表名稱配置為二級索引名稱。查詢會通過索引執行,範圍條件可正確生效。具體操作,請參見Tablestore外部表格

  • OTSReader 資料同步:在資料同步指令碼中,將表名稱配置為二級索引名稱。同步任務將從索引讀取資料,所設定的範圍條件可正確生效。具體操作,請參見配置Tablestore(OTS) Reader