全部產品
Search
文件中心

PolarDB:秒級加欄位

更新時間:Jul 24, 2025

使用傳統方法執行加列操作時,需重建整個表的資料,這將佔用大量的系統資源。PolarDB MySQL版叢集支援秒級加欄位(Instant add column)功能,可以協助您快速完成對任意大小表的加列操作。

秒級加欄位功能採用INSTANT演算法執行DDL操作,只需修改資料字典中的中繼資料,不需要修改或複製存量資料,也不需要重建表。因此,該過程不受表大小的限制,整個DDL操作可在秒級內完成。

前提條件

叢集版本需為以下版本之一:

  • PolarDB MySQL版5.6版本,且修訂版本為5.6.1.0.43及以上。

    說明

    PolarDB MySQL版5.6版本的秒級加列功能目前處於灰階階段。如需使用,請前往配額中心,根據配額IDpolardb_mysql_iac_56找到配額名稱,在對應的操作列單擊申請來開通該功能。

  • PolarDB MySQL版5.7版本,且修訂版本為5.7.1.0.6及以上。

    說明

    您需要先開啟loose_innodb_support_instant_add_column參數才能在PolarDB MySQL版5.7版本的叢集上使用該功能。

  • PolarDB MySQL版8.0版本。

    說明

    PolarDB MySQL版8.0版本的叢集預設支援秒級加欄位功能,無需配置任何參數。

您可以通過查詢版本號碼來確認叢集的修訂版本。

使用限制

  • 新增列只能為表的最後一列。

  • 添加虛擬列:

    • PolarDB MySQL版5.6版本與5.7版本:不支援

    • PolarDB MySQL版8.0版本:支援

  • 分區表秒級添加欄位:

    • PolarDB MySQL版5.6版本:不支援。

    • PolarDB MySQL版5.7版本與8.0版本:支援。

      說明

      PolarDB MySQL版5.7版本的分區表秒級添加欄位功能目前處於灰階階段。如需使用,請前往配額中心,根據配額IDpolarM_57_iac_on_partition_table找到配額名稱,在對應的操作列單擊申請來開通該功能。

  • 不支援使用了全文索引的表。

  • 不支援ROW_FORMAT為COMPRESSED的表。

  • 支援在存在列存索引的表上執行秒級加欄位操作,但需滿足如下條件:

    • PolarDB MySQL版8.0.1.1.42以下版本、8.0.2.2.23以下版本: 需將參數imci_enable_add_column_instant_ddl設定為ON。開啟該參數後,執行秒級加欄位操作會導致列存索引在後台靜默重建,重建期間列存索引不可用。

    • PolarDB MySQL版8.0.1.1.42及以上版本、8.0.2.2.23及以上版本: 需將參數imci_enable_add_column_instant_ddl設定為OFF

  • 不支援開啟了implicit_primary_key選項且未自訂主鍵的表。

  • 不支援在同一條SQL中同時執行其它DDL操作(如添加索引等)和秒級加欄位操作。

使用方法

參數配置

  • PolarDB MySQL版5.6版本和5.7版本的叢集:您需要開啟參數loose_innodb_support_instant_add_column來使用秒級加欄位功能。

    參數

    層級

    說明

    loose_innodb_support_instant_add_column

    Global

    秒級加欄位功能的開關,取值範圍如下:

    1. ON:開啟秒級加欄位功能。

    2. OFF(預設):關閉秒級加欄位功能。

  • PolarDB MySQL版8.0版本的叢集:您無需配置該參數即可直接使用秒級加欄位功能。

使用文法

  • 通過指定ALGORITHM=INSTANT以強制使用秒級加欄位功能,語句樣本如下:

    ALTER TABLE <table_name> ADD COLUMN <column_name> int, ALGORITHM=INSTANT;
    說明

    使用上述語句時,若返回ERROR 0A000: ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE. 的錯誤,表示當前加列操作不能以INSTANT演算法執行。建議您查看loose_innodb_support_instant_add_column參數是否已開啟,並仔細核對使用限制

  • 不指定ALGORITHM或指定ALGORITHM=DEFAULTPolarDB會自行選擇執行速度最快的演算法來執行加列操作,語句樣本如下:

    ALTER TABLE <table_name> ADD COLUMN <column_name> int, ALGORITHM=DEFAULT;
    ALTER TABLE <table_name> ADD COLUMN <column_name> int;
    說明

    PolarDB演算法選擇的優先順序為INSTANT>INPLACE>COPY。

查看通過INSTANT演算法增加的列資訊

  • PolarDB MySQL版5.6版本和5.7版本的叢集INFORMATION_SCHEMA資料庫中新增了INNODB_SYS_INSTANT_COLUMNS表。該表記錄了使用INSTANT演算法增加的列資訊,例如列名、列序號和預設值(二進位方式儲存)等。您可通過如下語句查看該表詳情來確認新增的列資訊。

    SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INSTANT_COLUMNS;
    說明

    對目標表使用了INSTANT演算法增加列後,如果執行了重建表的DDL操作(如DROP COLUMN)後,INNODB_SYS_INSTANT_COLUMNS表中該表的所有INSTANT列記錄將被清除。

  • PolarDB MySQL版8.0版本的叢集:您可通過如下語句查看錶的列資訊,若查詢結果中has_default列為1,則說明該列是通過INSTANT演算法增加的。

    SELECT * FROM INFORMATION_SCHEMA.INNODB_COLUMNS WHERE TABLE_ID = (SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME = "<database_name>/<table_name>");

聯絡我們

若您對DDL操作有任何疑問,請聯絡我們