本文將介紹全域二級索引(Global Secondary Index,GSI)的主要功能及常見問題。
功能介紹
全域二級索引(Global Secondary Index,GSI)支援按需增加拆分維度,提供全域唯一約束。每個GSI對應一張索引表,使用XA多寫保證主表和索引表之間資料強一致。
全域二級索引支援如下功能:
- 增加拆分維度。
- 支援全域唯一索引。
- XA多寫,保證主表與索引表資料強一致。
- 支援覆蓋列,減少回表操作,避免額外開銷。
- Online Schema Change,添加GSI不鎖主表。
- 支援通過HINT指定索引,自動判斷是否需要回表。
常見問題
- Q:全域二級索引能夠解決什麼問題?A:如果查詢的維度與邏輯表的拆分維度不同,會產生跨分區查詢。跨分區查詢的增加會導致查詢卡慢、串連池耗盡等效能問題。GSI能夠通過增加拆分維度來減少跨分區查詢,消除效能瓶頸。說明 建立GSI時需要注意選擇與主表不同的分庫分表鍵,詳情請參見使用全域二級索引。
- Q:全域二級索引和局部索引有什麼關係?
A:全域二級索引和局部索引間的關係如下所示:
- 全域二級索引:不同於局部索引,如果資料行和對應的索引行儲存在不同分區上,稱這種索引為全域二級索引,主要用於快速確定查詢涉及的資料分區。
- 局部索引:分散式資料庫中,如果資料行和對應的索引行儲存在相同分區上,稱這種索引為局部索引。PolarDB-X 1.0中特指物理表上的MySQL二級索引
- 兩者的關係:兩者需要搭配使用,PolarDB-X 1.0通過GSI將查詢下發到單個分區後,該分區上的局部索引能夠提升分區內的查詢效能。