管理索引 - Amazon Quantum Ledger Database (Amazon QLDB)

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

管理索引

本節說明如何在 Amazon QLDB 中建立、描述和刪除索引。您可以建立之每個資料表索引數量因素而異亞馬遜 QLDB 中的配額和限制

建立索引

如中所述建立資料表及索引,您可以使用 CREATE INDEX 陳述式在指定的頂層欄位的資料表上建立索引,如下所示。資料表名稱和索引欄位名稱都區分大小寫。

CREATE INDEX ON VehicleRegistration (VIN)
CREATE INDEX ON VehicleRegistration (LicensePlateNumber)

您在資料表上建立的每個索引都有系統指派的唯一 ID。若要尋找此索引 ID,請參閱下一節描述索引

重要

QLDB 需要一個索引來有效地查找文檔。如果沒有索引,QLDB 需要在讀取文檔時進行全表掃描。這可能會造成大型資料表的效能問題,包括並行衝突和交易逾時。

若要避免資料表掃描,您必須在索引欄位或文件 ID 上使用相等運算子 (=IN) 執行具有述WHERE詞子句的陳述式。如需詳細資訊,請參閱最佳化查詢效能

建立索引時,請注意下列條件約束:

  • 索引只能在單一頂層欄位上建立。不支援複合、巢狀、唯一和以函數為基礎的索引。

  • 您可以在任何 Ion 資料類型上建立索引,包括liststruct。但是,無論 Ion 類型如何,您都只能通過整個 Ion 值的相等性來進行索引查找。例如,當使用list類型作為索引時,您不能通過列表中的一個項目進行索引查找。

  • 只有在使用相等述詞時才會改善查詢效能;例如,WHERE indexedField = 123WHERE indexedField IN (456, 789)

    QLDB 不尊重查詢謂詞中的不等式。因此,範圍篩選的掃描不會實作。

  • 索引欄位的名稱區分大小寫,且最大長度可為 128 個字元。

  • QLDB 中的索引建立是非同步的。完成建立非空白資料表索引所需的時間量因資料表大小而異。如需詳細資訊,請參閱管理索引

描述索引

QLDB 中的索引建立是非同步的。完成建立非空白資料表索引所需的時間量因資料表大小而異。若要檢查索引建置的狀態,您可以查詢系統目錄資料表資訊 _schema.user_tables

例如,下列陳述式會查詢表格上所有索引的系統目VehicleRegistration錄。

SELECT VALUE indexes FROM information_schema.user_tables info, info.indexes indexes WHERE info.name = 'VehicleRegistration'
{
    indexId: "Djg2nt0yIs2GY0T29Kud1z",
    expr: "[VIN]",
    status: "ONLINE"
},
{
    indexId: "4tPW3fUhaVhDinRgKRLhGU",
    expr: "[LicensePlateNumber]",
    status: "FAILED",
    message: "aws.ledger.errors.InvalidEntityError: Document contains multiple values for indexed field: LicensePlateNumber"
}
索引欄位
  • indexId— 索引的唯一 ID。

  • expr— 已編製索引的文件路徑。此欄位的格式為字串:[fieldName]

  • status— 索引的目前狀態。索引的狀態可以是下列其中一個值:

    • BUILDING— 正在積極建立表格的索引。

    • FINALIZING— 已完成建立索引,並開始啟動索引以供使用。

    • ONLINE— 處於作用中狀態且可在查詢中使用。在狀態為連線之前,QLDB 不會在查詢中使用索引。

    • FAILED— 由於無法復原的錯誤,無法建立索引。處於此狀態的索引仍會計入每個資料表的索引配額。如需詳細資訊,請參閱常見錯誤

    • DELETING— 使用者捨棄索引之後,正在主動刪除索引。

  • message— 描述索引FAILED狀態之原因的錯誤訊息。此欄位只有失敗索引的欄位。

您也可以使用AWS Management Console檢查索引的狀態。

檢查索引(主控台)的狀態
  1. 登入AWS Management Console,開啟位於 https://console.aws.amazon.com/qldb 的 Amazon QLDB 主控台,開啟位於https://console.aws.amazon.com/qldb的 Amazon QLDB 主控台。

  2. 在導覽窗格中,選擇分類帳

  3. 在「分類帳」清單中,選擇您要管理其索引的分類帳名稱。

  4. 在分類帳詳細資訊頁面的「表格」標籤下,選擇要檢查其索引的表格名稱。

  5. 在資料表詳細資料頁面上,找出 [索引欄位] 卡片。[索引狀態] 資料行會顯示資料表上每個索引的目前狀態。

刪除索引

使用該DROP INDEX語句刪除索引。當您卸除索引時,它會從資料表中永久刪除。

首先,從中找到索引 IDinformation_schema.user_tables。例如,下列查詢會傳回indexIdVehicleRegistration料表上索引LicensePlateNumber欄位的。

SELECT indexes.indexId FROM information_schema.user_tables info, info.indexes indexes WHERE info.name = 'VehicleRegistration' and indexes.expr = '[LicensePlateNumber]'

然後,使用此 ID 刪除索引。下列是卸除索引 ID 的範例4tPW3fUhaVhDinRgKRLhGU。索引 ID 是唯一 ID,應以雙引號括住。

DROP INDEX "4tPW3fUhaVhDinRgKRLhGU" ON VehicleRegistration WITH (purge = true)
注意

所有DROP INDEX陳述式WITH (purge = true)都需要此子句,而且true是目前唯一支援的值。

關鍵字區purge分大小寫,且必須完全使用小寫。

您也可以使AWS Management Console用刪除索引。

刪除索引(控制台)
  1. 登入AWS Management Console,開啟位於 https://console.aws.amazon.com/qldb 的 Amazon QLDB 主控台,開啟位於https://console.aws.amazon.com/qldb的 Amazon QLDB 主控台。

  2. 在導覽窗格中,選擇分類帳

  3. 在「分類帳」清單中,選擇您要管理其索引的分類帳名稱。

  4. 在分類帳詳細資訊頁面的「表格」標籤下,選擇要刪除其索引的表格名稱。

  5. 在資料表詳細資料頁面上,找出 [索引欄位] 卡片。選取您要刪除的索引,然後選擇 [刪除索引]。

常見錯誤

本節說明建立索引時可能會遇到的常見錯誤,並建議可能的解決方案。

注意

狀態為的索引FAILED仍會計入您每個資料表的索引配額。失敗的索引也會防止您修改或刪除造成表格上索引建立失敗的任何文件。

您必須明確除索引,才能將其從配額中移除。

文檔包含索引字段的多個值:字段 fieldName

QLDB 無法為指定的欄位名稱建立索引,因為資料表包含相同欄位具有多個值的文件 (也就是重複的欄位名稱)。

您必須先卸除失敗的索引。然後,在重試索引建立之前,請確定表格中的所有文件對每個欄位名稱都只有一個值。您也可以為另一個沒有重複項的欄位建立索引。

如果您嘗試插入包含資料表上已編製索引之欄位的多個值的文件,QLDB 也會傳回這個錯誤。

超出索引限制:資料 tableName 稱已經有 n 個索引,而且無法建立更多索引。

QLDB 會強制執行每個資料表五個索引的限制,包括失敗的索引。您必須先刪除現有索引,然後再建立新索引。

沒有定義的索引與標識符:索引 ID

您嘗試刪除指定資料表和索引 ID 組合不存在的索引。若要瞭解如何檢查現有索引,請參閱描述索引