全部產品
Search
文件中心

Tablestore:建立二級索引

更新時間:Jun 30, 2024

二級索引相當於把資料表的主鍵查詢能力擴充到了不同的列,當需要使用屬性查詢資料時,您可以通過建立二級索引加快資料查詢的效率。設定預定義列後,在建立二級索引時將預定義列作為索引表的索引列或者屬性列。建立二級索引後,您可以使用二級索引進行資料查詢。

說明
  • 二級索引包括全域二級索引和本地二級索引。關於二級索引的更多資訊,請參見二級索引

  • 您也可以使用CreateTable介面在建立資料表的同時建立一個或者多個索引表。具體操作,請參見建立資料表

前提條件

  • 已初始化Client。具體操作,請參見初始化

  • 已建立資料表,且資料表的最大版本數(max_versions)必須為1,資料生命週期(time_to_live)必須滿足如下條件中的任意一個。

    • 資料表的資料生命週期為-1(資料永不到期)。

    • 資料表的資料生命週期不為-1時,資料表為禁止更新狀態。

  • 資料表已設定預定義列。

注意事項

  • 索引表名稱不能與已存在的時序表名稱和資料表名稱相同。

  • 建立二級索引時,系統會自動將未出現在索引列中的資料表主鍵補齊到索引表主鍵中。

  • 建立本地二級索引時,索引表的第一列主鍵必須與資料表的第一列主鍵相同。

介面

/**
 * 建立二級索引。
 * @api
 *
 * @param [] $request
 *            請求參數,資料表名稱。
 * @return [] 請求返回
 * @throws OTSClientException 當參數檢查出錯或服務端返回校正出錯時拋出異常。
 * @throws OTSServerException 當OTS服務端返回錯誤時拋出異常。
 * @example "src/examples/CreateIndex.php"
 */
public function createIndex(array $request)

參數

參數

說明

table_name

資料表名稱。

index_meta

索引表的結構資訊,包括如下內容:

  • name:索引表名稱。

  • primary_key:索引表的索引列,索引列為資料表主鍵和預定義列的任意組合。

  • defined_column:索引表的屬性列,索引表屬性列為資料表的預定義列的組合。

  • index_update_mode:索引表更新模式,可選值包括IndexUpdateModeConst::ASYNC_INDEXIndexUpdateModeConst::SYNC_INDEX

    • 當不設定index_update_mode或者設定index_update_mode為IndexUpdateModeConst::ASYNC_INDEX時,表示非同步更新。

      使用全域二級索引時,索引更新模式必須設定為非同步更新(IndexUpdateModeConst::ASYNC_INDEX)。

    • 當設定index_update_mode為IndexUpdateModeConst::SYNC_INDEX時,表示同步更新。

      使用本地二級索引時,索引更新模式必須設定為同步更新(IndexUpdateModeConst::SYNC_INDEX)。

  • index_type:索引表類型,索引類型。可選值包括IndexTypeConst::GLOBAL_INDEXIndexTypeConst::LOCAL_INDEX

    • 當不設定index_type或者設定index_type為IndexTypeConst::GLOBAL_INDEX時,表示使用全域二級索引。

      使用全域二級索引時,Table Store以非同步方式將資料表中被索引的列和主鍵列的資料自動同步到索引表中,正常情況下同步延遲達到毫秒層級。

    • 當設定index_type為IndexTypeConst::LOCAL_INDEX時,表示使用本地二級索引。

      使用本地二級索引時,Table Store以同步方式將資料表中被索引的列和主鍵列的資料自動同步到索引表中,當資料寫入資料表後,即可從索引表中查詢到資料。

include_base_data

索引表中是否包含資料表中已存在的資料,預設值為false。

  • 當設定include_base_data為true時,表示包含存量資料。

  • 當不設定include_base_data或者設定include_base_data為false時,表示不包含存量資料。

樣本

建立全域二級索引

建立二級索引時,如果不指定index_type和index_update_mode,則預設建立的為全域二級索引。

$request = array(
    'table_name' => '<TABLE_NAME>', //設定資料表名稱。
    //'include_base_data' => true,  //設定此參數為true,表示建立二級索引時包含存量資料。
    'index_meta' => array(
        'name' => '<INDEX_NAME>',  //設定索引表名稱。
        'primary_key' => array('Col1'), //設定索引表主鍵列。
        'defined_column' => array('Col2')  //設定索引表屬性列。
    )
);
$otsClient->createIndex($request);

您也可以通過指定index_type和index_update_mode來建立全域二級索引。

$request = array(
    'table_name' => '<TABLE_NAME>', //設定資料表名稱。
    //'include_base_data' => true,  //設定此參數為true,表示建立二級索引時包含存量資料。
    'index_meta' => array(
        'name' => '<INDEX_NAME>',  //設定索引表名稱。
        'primary_key' => array('Col1'),  //設定索引表主鍵列。
        'defined_column' => array('Col2'), //設定索引表屬性列。
        'index_type' => IndexTypeConst::GLOBAL_INDEX,
        'index_update_mode' => IndexUpdateModeConst::ASYNC_INDEX
    )
);
$otsClient->createIndex($request);

建立本地二級索引

以下樣本用於建立一個本地二級索引。

$createLocalRequest = array (
   'table_name' => '<TABLE_NAME>', //設定資料表名稱。
    //'include_base_data' => true,  //設定此參數為true,表示建立二級索引時包含存量資料。
   'index_meta' => array (
       'name' => '<INDEX_NAME>', //設定索引表名稱。
       'primary_key' => array('PK0', 'Col1'), //設定索引表主鍵。索引表的第一列主鍵必須與資料表的第一列主鍵相同。
       'defined_column' => array('Col2'), //設定索引表屬性列。
       'index_type' => IndexTypeConst::LOCAL_INDEX,
       'index_update_mode' => IndexUpdateModeConst::SYNC_INDEX
   )
);
$otsClient->createIndex($createLocalRequest);

相關文檔

  • 建立二級索引後,您可以單行讀取或者範圍讀取資料。具體操作,請參見使用二級索引讀取資料

  • 如果不再需要使用二級索引,您可以刪除二級索引。具體操作,請參見刪除二級索引