本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
管理索引
重要
支援結束通知:現有客戶將能夠使用 Amazon,QLDB直到 2025 年 7 月 31 日終止支援為止。有關更多詳細信息,請參閱將 Amazon QLDB 分類帳遷移到 Amazon Aurora 郵政. SQL
本節說明如何在 Amazon 中建立、描述和刪除索引QLDB。您可以在中定義您可以建立之每個表格的索引數目配額Amazon 的配額和限制 QLDB。
建立索引
如中所述建立資料表和索引,您可以使用CREATEINDEX陳述式在指定的頂層欄位的資料表上建立索引,如下所示。資料表名稱和索引欄位名稱都區分大小寫。
CREATE INDEX ON VehicleRegistration (VIN)
CREATE INDEX ON VehicleRegistration (LicensePlateNumber)
您在資料表上建立的每個索引都有系統指派的唯一 ID。若要尋找此索引 ID,請參閱下一節描述索引。
重要
QLDB需要索引才能有效地查找文檔。如果沒有索引,則QLDB需要在閱讀文檔時進行全表掃描。這可能會造成大型資料表的效能問題,包括並行衝突和交易逾時。
若要避免資料表掃描,您必須在索引欄位或文件 ID 上使用相等運算子 (=
或IN
) 執行具有述WHERE
詞子句的陳述式。如需詳細資訊,請參閱 最佳化查詢效能。
建立索引時,請注意下列條件約束:
-
索引只能在單一頂層欄位上建立。不支援複合、巢狀、唯一和以函數為基礎的索引。
-
您可以在任何 Ion 資料類型上建立索引,包括
list
和struct
。但是,無論 Ion 類型如何,您都只能通過整個 Ion 值的相等性來進行索引查找。例如,當使用list
類型作為索引時,您不能通過列表中的一個項目進行索引查找。 -
只有在您使用相等述詞時才會改善查詢效能;例如,
WHERE indexedField = 123
或WHERE 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
— 索引的唯一識別碼。 -
expr
— 已編製索引的文件路徑。此欄位的格式為字串:[fieldName]
。 -
status
— 索引的目前狀態。索引的狀態可以是下列其中一個值:-
BUILDING
— 正在積極建立表格的索引。 -
FINALIZING
— 已完成建立索引,並開始啟動索引以供使用。 -
ONLINE
— 處於作用中狀態且可在查詢中使用。QLDB在狀態處於聯機狀態之前,不會在查詢中使用索引。 -
FAILED
— 由於無法復原的錯誤,無法建立索引。處於此狀態的索引仍會計入每個資料表的索引配額。如需詳細資訊,請參閱 常見錯誤。 -
DELETING
— 使用者捨棄索引之後,正在主動刪除索引。
-
-
message
— 描述索引處於FAILED
狀態之原因的錯誤訊息。只有失敗索引才會包含此欄位。
您也可以使用 AWS Management Console 來檢查索引的狀態。
檢查索引(控制台)的狀態
登錄到 AWS Management Console, 並打開 Amazon QLDB 控制台 https://console.aws.amazon.com/qldb
. -
在瀏覽窗格中,選擇「分類帳」。
-
在「分類帳」清單中,選擇您要管理其索引的分類帳名稱。
-
在分類帳詳細資訊頁面的「表格」標籤下,選擇要檢查其索引的表格名稱。
-
在資料表詳細資料頁面上,找出 [索引欄位] 卡片。[索引狀態] 資料行會顯示資料表上每個索引的目前狀態。
刪除索引
使用該DROP INDEX語句刪除索引。當您卸除索引時,它會從資料表中永久刪除。
首先,從中找到索引 ID information_schema.user_tables
。例如,下列查詢會傳回indexId
資VehicleRegistration
料表上索引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 是應以雙引號括住的唯一識別碼。
DROP INDEX "4tPW3fUhaVhDinRgKRLhGU" ON VehicleRegistration WITH (purge = true)
注意
所有DROP
INDEX
陳述式WITH (purge = true)
都需要此子句,而且true
是目前唯一支援的值。
關鍵字區分大小寫,且必須全部purge
為小寫。
您也可以使 AWS Management Console 用刪除索引。
刪除索引(控制台)
登錄到 AWS Management Console, 並打開 Amazon QLDB 控制台 https://console.aws.amazon.com/qldb
. -
在瀏覽窗格中,選擇「分類帳」。
-
在「分類帳」清單中,選擇您要管理其索引的分類帳名稱。
-
在分類帳詳細資訊頁面的「表格」標籤下,選擇要刪除其索引的表格名稱。
-
在資料表詳細資料頁面上,找出 [索引欄位] 卡片。選取您要刪除的索引,然後選擇 [刪除索引]。
常見錯誤
本節說明建立索引時可能會遇到的常見錯誤,並建議可能的解決方案。
注意
狀態為的索引FAILED
仍會計入您每個資料表的索引配額。失敗的索引也會防止您修改或刪除造成表格上索引建立失敗的任何文件。
您必須明確刪除索引,才能將其從配額中移除。
- 文檔包含索引字段的多個值:
fieldName
. -
QLDB無法為指定的欄位名稱建立索引,因為資料表包含具有相同欄位多個值的文件 (也就是重複的欄位名稱)。
您必須先卸除失敗的索引。然後,在重試索引建立之前,請確定表格中的所有文件對每個欄位名稱都只有一個值。您也可以為另一個沒有重複項的欄位建立索引。
QLDB如果您嘗試插入包含資料表上已編製索引之欄位的多個值的文件,也會傳回此錯誤。
- 超出索引限制:表格
tableName
已經有了n
索引,並且不能創建更多。 -
QLDB每個資料表強制執行五個索引的限制,包括失敗的索引。您必須先刪除現有索引,然後再建立新索引。
- 沒有帶標識符的定義索引:
indexId
. -
您嘗試刪除指定資料表和索引 ID 組合不存在的索引。若要瞭解如何檢查現有索引,請參閱描述索引。