すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DMLのグローバルセカンダリインデックスの制限

最終更新日:May 24, 2024

このトピックでは、PolarDB-X 1.0のグローバルセカンダリインデックス (GSI) がデータ操作言語 (DML) に与える制限について説明します。

前提条件

カスタムApsaraDB RDS for MySQLインスタンスのバージョンは5.7以降で、PolarDB-X 1.0インスタンスのバージョンは5.4.1以降です。

次の表は、GSIがDMLに対して持つ制限を説明するために使用されます。

CREATE TAB_order (
  'id' bigint(11) NOT NULL AUTO_INCREMENT、
  'order_id' varchar(20) DEFAULT NULL、
  'buyer_id 'varchar(20) デフォルトNULL、
  'seller_id 'varchar(20) DEFAULT NULL、
  'order_snapshot' ロングテキストDEFAULT NULL、
  'order_detail' ロングテキストDEFAULT NULL、
  主要なキー ('id') 、
  ユニークなキー 'l_i_order ' ('order_id') 、
  グローバルインデックス 'g_i_seller ' ('seller_id') dbpartition by hash('seller_id') tbpartition by hash('seller_id') 、
  グローバルユニークなインデックス 'g_i_buyer ' ('buyer_id') カバー (order_snapshot) dbpartition by hash('buyer_id')
) ENGINE=InnoDB DEFAULT CHARSET=ハッシュによるutf8 dbpartition ('order_id'); 

GSIのテーブルへの書き込みに失敗すると、テーブルで他のDMLステートメントを実行できなくなり、テーブルでトランザクションをコミットできなくなります。

SET DRDS_TRANSACTION_POLICY='XA';
INSERT INTO t_order(order_id, buyer_id, seller_id) 値 ('order_1 ', 'buyer_1', 'seller_1 ');
# テーブルへのGSIの書き込みに失敗しました。
INSERT IGNORE INTO t_order(order_id, buyer_id, seller_id) 値 ('order_2 ', 'buyer_1', 'seller_1 ');
# 他のDML文はテーブルで実行できません。
INSERT IGNORE INTO t_order(order_id, buyer_id, seller_id) 値 ('order_2 ', 'buyer_2', 'seller_2 ');
# トランザクションはテーブルでコミットできません。
コミット;