相关文章推荐
逆袭的黑框眼镜  ·  pycharm终端不是内部或外部命令,也不是 ...·  7 月前    · 
暴走的毛衣  ·  osg如何读取msh文件 - CSDN文库·  9 月前    · 
性感的毛豆  ·  通过VBA,当在EXCEL单元格中输入任意的 ...·  1 年前    · 
犯傻的菠萝  ·  映射 Active Directory ...·  1 年前    · 
暗恋学妹的柑橘  ·  JSONPath Support | ...·  1 年前    · 
Code  ›  MySQL :: MySQL 8.0 Reference Manual :: 15.12.1 Online DDL Operations
mysql table partition column
https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html
要出家的小熊猫
1 年前
Making the Buffer Pool Scan Resistant
Configuring InnoDB Buffer Pool Prefetching (Read-Ahead)
Configuring Buffer Pool Flushing
Saving and Restoring the Buffer Pool State
Excluding Buffer Pool Pages from Core Files
Configuring Thread Concurrency for InnoDB
Configuring the Number of Background InnoDB I/O Threads
Using Asynchronous I/O on Linux
Configuring InnoDB I/O Capacity
Configuring Spin Lock Polling
Purge Configuration
Configuring Optimizer Statistics for InnoDB
Configuring Persistent Optimizer Statistics Parameters
Configuring Non-Persistent Optimizer Statistics Parameters
Estimating ANALYZE TABLE Complexity for InnoDB Tables
Configuring Parallel Threads for Online DDL Operations
Simplifying DDL Statements with Online DDL
Online DDL Failure Conditions
Online DDL Limitations
InnoDB Lock and Lock-Wait Information
Persistence and Consistency of InnoDB Transaction and Locking Information
InnoDB INFORMATION_SCHEMA Schema Object Tables
InnoDB INFORMATION_SCHEMA FULLTEXT Index Tables
InnoDB INFORMATION_SCHEMA Buffer Pool Tables
InnoDB INFORMATION_SCHEMA Metrics Table
InnoDB INFORMATION_SCHEMA Temporary Table Info Table
Retrieving InnoDB Tablespace Metadata from INFORMATION_SCHEMA.FILES
Setting Up the InnoDB memcached Plugin
InnoDB memcached Multiple get and Range Query Support
Security Considerations for the InnoDB memcached Plugin
Writing Applications for the InnoDB memcached Plugin
Adapting an Existing MySQL Schema for the InnoDB memcached Plugin
Adapting a memcached Application for the InnoDB memcached Plugin
Tuning InnoDB memcached Plugin Performance
Controlling Transactional Behavior of the InnoDB memcached Plugin
Adapting DML Statements to memcached Operations
Performing DML and DDL Statements on the Underlying InnoDB Table
Online support details, syntax examples, and usage notes for DDL operations are provided under the following topics in this section.
  • Index Operations

  • Primary Key Operations

  • Column Operations

  • Generated Column Operations

  • Foreign Key Operations

  • Table Operations

  • Tablespace Operations

  • Partitioning Operations

The following table provides an overview of online DDL support for index operations. An asterisk indicates additional information, an exception, or a dependency. For details, see Syntax and Usage Notes .

Table 15.16 Online DDL Support for Index Operations

Operation Instant In Place Rebuilds Table Permits Concurrent DML Only Modifies Metadata Creating or adding a secondary index Dropping an index Renaming an index Adding a FULLTEXT index Adding a SPATIAL index Changing the index type Creating or adding a secondary index

CREATE INDEX name ON table (col_list);
ALTER TABLE tbl_name ADD INDEX name (col_list);

The table remains available for read and write operations while the index is being created. The CREATE INDEX statement only finishes after all transactions that are accessing the table are completed, so that the initial state of the index reflects the most recent contents of the table. Online DDL support for adding secondary indexes means that you can generally speed the overall process of creating and loading a table and associated indexes by creating the table without secondary indexes, then adding secondary indexes after the data is loaded. A newly created secondary index contains only the committed data in the table at the time the CREATE INDEX or ALTER TABLE statement finishes executing. It does not contain any uncommitted values, old versions of values, or values marked for deletion but not yet removed from the old index. Some factors affect the performance, space usage, and semantics of this operation. For details, see Section 15.12.8, “Online DDL Limitations” . Dropping an index

DROP INDEX name ON table;
ALTER TABLE tbl_name DROP INDEX name;

The table remains available for read and write operations while the index is being dropped. The DROP INDEX statement only finishes after all transactions that are accessing the table are completed, so that the initial state of the index reflects the most recent contents of the table. Renaming an index

ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name, ALGORITHM=INPLACE, LOCK=NONE;
  • Adding a FULLTEXT index

    CREATE FULLTEXT INDEX name ON table(column);

    Adding the first FULLTEXT index rebuilds the table if there is no user-defined FTS_DOC_ID column. Additional FULLTEXT indexes may be added without rebuilding the table. Adding a SPATIAL index

    CREATE TABLE geom (g GEOMETRY NOT NULL);
    ALTER TABLE geom ADD SPATIAL INDEX(g), ALGORITHM=INPLACE, LOCK=SHARED;
  • Changing the index type ( USING {BTREE | HASH} )

    ALTER TABLE tbl_name DROP INDEX i1, ADD INDEX i1(key_part,...) USING BTREE, ALGORITHM=INSTANT;
  • The following table provides an overview of online DDL support for primary key operations. An asterisk indicates additional information, an exception, or a dependency. See Syntax and Usage Notes .

    Table 15.17 Online DDL Support for Primary Key Operations

    Operation Instant In Place Rebuilds Table Permits Concurrent DML Only Modifies Metadata Adding a primary key Dropping a primary key Dropping a primary key and adding another Adding a primary key

    ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;

    Rebuilds the table in place. Data is reorganized substantially, making it an expensive operation. ALGORITHM=INPLACE is not permitted under certain conditions if columns have to be converted to NOT NULL . Restructuring the clustered index always requires copying of table data. Thus, it is best to define the primary key when you create a table, rather than issuing ALTER TABLE ... ADD PRIMARY KEY later. When you create a UNIQUE or PRIMARY KEY index, MySQL must do some extra work. For UNIQUE indexes, MySQL checks that the table contains no duplicate values for the key. For a PRIMARY KEY index, MySQL also checks that none of the PRIMARY KEY columns contains a NULL . When you add a primary key using the ALGORITHM=COPY clause, MySQL converts NULL values in the associated columns to default values: 0 for numbers, an empty string for character-based columns and BLOBs, and 0000-00-00 00:00:00 for DATETIME . This is a non-standard behavior that Oracle recommends you not rely on. Adding a primary key using ALGORITHM=INPLACE is only permitted when the SQL_MODE setting includes the strict_trans_tables or strict_all_tables flags; when the SQL_MODE setting is strict, ALGORITHM=INPLACE is permitted, but the statement can still fail if the requested primary key columns contain NULL values. The ALGORITHM=INPLACE behavior is more standard-compliant. If you create a table without a primary key, InnoDB chooses one for you, which can be the first UNIQUE key defined on NOT NULL columns, or a system-generated key. To avoid uncertainty and the potential space requirement for an extra hidden column, specify the PRIMARY KEY clause as part of the CREATE TABLE statement. MySQL creates a new clustered index by copying the existing data from the original table to a temporary table that has the desired index structure. Once the data is completely copied to the temporary table, the original table is renamed with a different temporary table name. The temporary table comprising the new clustered index is renamed with the name of the original table, and the original table is dropped from the database. The online performance enhancements that apply to operations on secondary indexes do not apply to the primary key index. The rows of an InnoDB table are stored in a clustered index organized based on the primary key , forming what some database systems call an “ index-organized table ” . Because the table structure is closely tied to the primary key, redefining the primary key still requires copying the data. When an operation on the primary key uses ALGORITHM=INPLACE , even though the data is still copied, it is more efficient than using ALGORITHM=COPY because: No undo logging or associated redo logging is required for ALGORITHM=INPLACE . These operations add overhead to DDL statements that use ALGORITHM=COPY . The secondary index entries are pre-sorted, and so can be loaded in order. The change buffer is not used, because there are no random-access inserts into the secondary indexes. Dropping a primary key

    ALTER TABLE tbl_name DROP PRIMARY KEY, ALGORITHM=COPY;

    Only ALGORITHM=COPY supports dropping a primary key without adding a new one in the same ALTER TABLE statement. Dropping a primary key and adding another

    ALTER TABLE tbl_name DROP PRIMARY KEY, ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;

    Data is reorganized substantially, making it an expensive operation. The following table provides an overview of online DDL support for column operations. An asterisk indicates additional information, an exception, or a dependency. For details, see Syntax and Usage Notes .

    Table 15.18 Online DDL Support for Column Operations

    Operation Instant In Place Rebuilds Table Permits Concurrent DML Only Modifies Metadata Adding a column Dropping a column Renaming a column Reordering columns Setting a column default value Changing the column data type Extending VARCHAR column size Dropping the column default value Changing the auto-increment value Making a column NULL Making a column NOT NULL Modifying the definition of an ENUM or SET column Adding a column

    ALTER TABLE tbl_name ADD COLUMN column_name column_definition, ALGORITHM=INSTANT;

    INSTANT is the default algorithm as of MySQL 8.0.12, and INPLACE before that. The following limitations apply when the INSTANT algorithm adds a column: A statement cannot combine the addition of a column with other ALTER TABLE actions that do not support the INSTANT algorithm. The INSTANT algorithm can add a column at any position in the table. Before MySQL 8.0.29, the INSTANT algorithm could only add a column as the last column of the table. Columns cannot be added to tables that use ROW_FORMAT=COMPRESSED , tables with a FULLTEXT index, tables that reside in the data dictionary tablespace, or temporary tables. Temporary tables only support ALGORITHM=COPY . MySQL checks the row size when the INSTANT algorithm adds a column, and throws the following error if the addition exceeds the limit. ERROR 4092 (HY000): Column can't be added with ALGORITHM=INSTANT as after this max possible row size crosses max permissible row size. Try ALGORITHM=INPLACE/COPY. Before MySQL 8.0.29, MySQL does not check the row size when the INSTANT algorithm adds a column. However, MySQL does check the row size during DML operations that insert and update rows in the table. The maximum number of columns in the internal representation of the table cannot exceed 1022 after column addition with the INSTANT algorithm. The error message is: ERROR 4158 (HY000): Column can't be added to tbl_name with ALGORITHM=INSTANT anymore. Please try ALGORITHM=INPLACE/COPY Multiple columns may be added in the same ALTER TABLE statement. For example:

    ALTER TABLE t1 ADD COLUMN c2 INT, ADD COLUMN c3 INT, ALGORITHM=INSTANT;

    A new row version is created after each ALTER TABLE ... ALGORITHM=INSTANT operation that adds one or more columns, drops one or more columns, or adds and drops one or more columns in the same operation. The INFORMATION_SCHEMA.INNODB_TABLES.TOTAL_ROW_VERSIONS column tracks the number of row versions for a table. The value is incremented each time a column is instantly added or dropped. The initial value is 0.

    mysql>  SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES 
            WHERE NAME LIKE 'test/t1';
    +---------+--------------------+
    | NAME    | TOTAL_ROW_VERSIONS |
    +---------+--------------------+
    | test/t1 |                  0 |
    +---------+--------------------+

    When a table with instantly added or dropped columns is rebuilt by table-rebuilding ALTER TABLE or OPTIMIZE TABLE operation, the TOTAL_ROW_VERSIONS value is reset to 0. The maximum number of row versions permitted is 64, as each row version requires additional space for table metadata. When the row version limit is reached, ADD COLUMN and DROP COLUMN operations using ALGORITHM=INSTANT are rejected with an error message that recommends rebuilding the table using the COPY or INPLACE algorithm. ERROR 4080 (HY000): Maximum row versions reached for table test/t1. No more columns can be added or dropped instantly. Please use COPY/INPLACE. The following INFORMATION_SCHEMA columns provide additional metadata for instantly added columns. Refer to the descriptions of those columns for more information. See Section 26.4.9, “The INFORMATION_SCHEMA INNODB_COLUMNS Table” , Section 26.4.23, “The INFORMATION_SCHEMA INNODB_TABLES Table” . INNODB_COLUMNS.DEFAULT_VALUE INNODB_COLUMNS.HAS_DEFAULT INNODB_TABLES.INSTANT_COLS Concurrent DML is not permitted when adding an auto-increment column. Data is reorganized substantially, making it an expensive operation. At a minimum, ALGORITHM=INPLACE, LOCK=SHARED is required. The table is rebuilt if ALGORITHM=INPLACE is used to add a column. Dropping a column

    ALTER TABLE tbl_name DROP COLUMN column_name, ALGORITHM=INSTANT;

    INSTANT is the default algorithm as of MySQL 8.0.29, and INPLACE before that. The following limitations apply when the INSTANT algorithm is used to drop a column: Dropping a column cannot be combined in the same statement with other ALTER TABLE actions that do not support ALGORITHM=INSTANT . Columns cannot be dropped from tables that use ROW_FORMAT=COMPRESSED , tables with a FULLTEXT index, tables that reside in the data dictionary tablespace, or temporary tables. Temporary tables only support ALGORITHM=COPY . Multiple columns may be dropped in the same ALTER TABLE statement; for example:

    ALTER TABLE t1 DROP COLUMN c4, DROP COLUMN c5, ALGORITHM=INSTANT;

    Each time a column is added or dropped using ALGORITHM=INSTANT , a new row version is created. The INFORMATION_SCHEMA.INNODB_TABLES.TOTAL_ROW_VERSIONS column tracks the number of row versions for a table. The value is incremented each time a column is instantly added or dropped. The initial value is 0.

    mysql>  SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES 
            WHERE NAME LIKE 'test/t1';
    +---------+--------------------+
    | NAME    | TOTAL_ROW_VERSIONS |
    +---------+--------------------+
    | test/t1 |                  0 |
    +---------+--------------------+

    When a table with instantly added or dropped columns is rebuilt by table-rebuilding ALTER TABLE or OPTIMIZE TABLE operation, the TOTAL_ROW_VERSIONS value is reset to 0. The maximum number of row versions permitted is 64, as each row version requires additional space for table metadata. When the row version limit is reached, ADD COLUMN and DROP COLUMN operations using ALGORITHM=INSTANT are rejected with an error message that recommends rebuilding the table using the COPY or INPLACE algorithm. ERROR 4080 (HY000): Maximum row versions reached for table test/t1. No more columns can be added or dropped instantly. Please use COPY/INPLACE. If an algorithm other than ALGORITHM=INSTANT is used, data is reorganized substantially, making it an expensive operation. Renaming a column

    ALTER TABLE tbl CHANGE old_col_name new_col_name data_type, ALGORITHM=INSTANT, LOCK=NONE;

    ALGORITHM=INSTANT support for renaming a column was added in MySQL 8.0.28. Earlier MySQL Server releases support only ALGORITHM=INPLACE and ALGORITHM=COPY when renaming a column. To permit concurrent DML, keep the same data type and only change the column name. When you keep the same data type and [NOT] NULL attribute, only changing the column name, the operation can always be performed online. Renaming a column referenced from another table is only permitted with ALGORITHM=INPLACE . If you use ALGORITHM=INSTANT , ALGORITHM=COPY , or some other condition that causes the operation to use those algorithms, the ALTER TABLE statement fails. ALGORITHM=INSTANT supports renaming a virtual column; ALGORITHM=INPLACE does ALGORITHM=INSTANT and ALGORITHM=INPLACE do not support renaming a column when adding or dropping a virtual column in the same statement. In this case, only ALGORITHM=COPY is supported. Reordering columns To reorder columns, use FIRST or AFTER in CHANGE or MODIFY operations.

    ALTER TABLE tbl_name MODIFY COLUMN col_name column_definition FIRST, ALGORITHM=INPLACE, LOCK=NONE;

    Data is reorganized substantially, making it an expensive operation. Changing the column data type

    ALTER TABLE tbl_name CHANGE c1 c1 BIGINT, ALGORITHM=COPY;

    Changing the column data type is only supported with ALGORITHM=COPY . Extending VARCHAR column size

    ALTER TABLE tbl_name CHANGE COLUMN c1 c1 VARCHAR(255), ALGORITHM=INPLACE, LOCK=NONE;

    The number of length bytes required by a VARCHAR column must remain the same. For VARCHAR columns of 0 to 255 bytes in size, one length byte is required to encode the value. For VARCHAR columns of 256 bytes in size or more, two length bytes are required. As a result, in-place ALTER TABLE only supports increasing VARCHAR column size from 0 to 255 bytes, or from 256 bytes to a greater size. In-place ALTER TABLE does not support increasing the size of a VARCHAR column from less than 256 bytes to a size equal to or greater than 256 bytes. In this case, the number of required length bytes changes from 1 to 2, which is only supported by a table copy ( ALGORITHM=COPY ). For example, attempting to change VARCHAR column size for a single byte character set from VARCHAR(255) to VARCHAR(256) using in-place ALTER TABLE returns this error:

    ALTER TABLE tbl_name ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(256);
    ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change
    column type INPLACE. Try ALGORITHM=COPY.
    The byte length of a VARCHAR column is dependant on the byte length of the character set. Decreasing VARCHAR size using in-place ALTER TABLE is not supported. Decreasing VARCHAR size requires a table copy ( ALGORITHM=COPY ). Setting a column default value

    ALTER TABLE tbl_name ALTER COLUMN col SET DEFAULT literal, ALGORITHM=INSTANT;

    Only modifies table metadata. Default column values are stored in the data dictionary . Dropping a column default value

    ALTER TABLE tbl ALTER COLUMN col DROP DEFAULT, ALGORITHM=INSTANT;
  • Changing the auto-increment value

    ALTER TABLE table AUTO_INCREMENT=next_value, ALGORITHM=INPLACE, LOCK=NONE;

    Modifies a value stored in memory, not the data file. In a distributed system using replication or sharding, you sometimes reset the auto-increment counter for a table to a specific value. The next row inserted into the table uses the specified value for its auto-increment column. You might also use this technique in a data warehousing environment where you periodically empty all the tables and reload them, and restart the auto-increment sequence from 1. Making a column NULL

    ALTER TABLE tbl_name MODIFY COLUMN column_name data_type NULL, ALGORITHM=INPLACE, LOCK=NONE;

    Rebuilds the table in place. Data is reorganized substantially, making it an expensive operation. Making a column NOT NULL

    ALTER TABLE tbl_name MODIFY COLUMN column_name data_type NOT NULL, ALGORITHM=INPLACE, LOCK=NONE;

    Rebuilds the table in place. STRICT_ALL_TABLES or STRICT_TRANS_TABLES SQL_MODE is required for the operation to succeed. The operation fails if the column contains NULL values. The server prohibits changes to foreign key columns that have the potential to cause loss of referential integrity. See Section 13.1.9, “ALTER TABLE Statement” . Data is reorganized substantially, making it an expensive operation. Modifying the definition of an ENUM or SET column

    CREATE TABLE t1 (c1 ENUM('a', 'b', 'c'));
    ALTER TABLE t1 MODIFY COLUMN c1 ENUM('a', 'b', 'c', 'd'), ALGORITHM=INSTANT;

    Modifying the definition of an ENUM or SET column by adding new enumeration or set members to the end of the list of valid member values may be performed instantly or in place, as long as the storage size of the data type does not change. For example, adding a member to a SET column that has 8 members changes the required storage per value from 1 byte to 2 bytes; this requires a table copy. Adding members in the middle of the list causes renumbering of existing members, which requires a table copy. The following table provides an overview of online DDL support for generated column operations. For details, see Syntax and Usage Notes .

    Table 15.19 Online DDL Support for Generated Column Operations

    Operation Instant In Place Rebuilds Table Permits Concurrent DML Only Modifies Metadata Adding a STORED column Modifying STORED column order Dropping a STORED column Adding a VIRTUAL column Modifying VIRTUAL column order Dropping a VIRTUAL column Adding a STORED column

    ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) STORED), ALGORITHM=COPY;

    ADD COLUMN is not an in-place operation for stored columns (done without using a temporary table) because the expression must be evaluated by the server. Modifying STORED column order

    ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED FIRST, ALGORITHM=COPY;

    Rebuilds the table in place. Dropping a STORED column

    ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE, LOCK=NONE;

    Rebuilds the table in place. Adding a VIRTUAL column

    ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL), ALGORITHM=INSTANT;

    Adding a virtual column can be performed instantly or in place for non-partitioned tables. Adding a VIRTUAL is not an in-place operation for partitioned tables. Modifying VIRTUAL column order

    ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL FIRST, ALGORITHM=COPY;
  • Dropping a VIRTUAL column

    ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INSTANT;

    Dropping a VIRTUAL column can be performed instantly or in place for non-partitioned tables. The following table provides an overview of online DDL support for foreign key operations. An asterisk indicates additional information, an exception, or a dependency. For details, see Syntax and Usage Notes .

    Table 15.20 Online DDL Support for Foreign Key Operations

    Operation Instant In Place Rebuilds Table Permits Concurrent DML Only Modifies Metadata Adding a foreign key constraint Dropping a foreign key constraint The INPLACE algorithm is supported when foreign_key_checks is disabled. Otherwise, only the COPY algorithm is supported.

    ALTER TABLE tbl1 ADD CONSTRAINT fk_name FOREIGN KEY index (col1)
      REFERENCES tbl2(col2) referential_actions;
  • Dropping a foreign key constraint

    ALTER TABLE tbl DROP FOREIGN KEY fk_name;

    Dropping a foreign key can be performed online with the foreign_key_checks option enabled or disabled. If you do not know the names of the foreign key constraints on a particular table, issue the following statement and find the constraint name in the CONSTRAINT clause for each foreign key:

    SHOW CREATE TABLE table\G

    Or, query the Information Schema TABLE_CONSTRAINTS table and use the CONSTRAINT_NAME and CONSTRAINT_TYPE columns to identify the foreign key names. You can also drop a foreign key and its associated index in a single statement:

    ALTER TABLE table DROP FOREIGN KEY constraint, DROP INDEX index;
  • If foreign keys are already present in the table being altered (that is, it is a child table containing a FOREIGN KEY ... REFERENCE clause), additional restrictions apply to online DDL operations, even those not directly involving the foreign key columns: An ALTER TABLE on the child table could wait for another transaction to commit, if a change to the parent table causes associated changes in the child table through an ON UPDATE or ON DELETE clause using the CASCADE or SET NULL parameters. In the same way, if a table is the parent table in a foreign key relationship, even though it does not contain any FOREIGN KEY clauses, it could wait for the ALTER TABLE to complete if an INSERT , UPDATE , or DELETE statement causes an ON UPDATE or ON DELETE action in the child table. The following table provides an overview of online DDL support for table operations. An asterisk indicates additional information, an exception, or a dependency. For details, see Syntax and Usage Notes .

    Table 15.21 Online DDL Support for Table Operations

    Operation Instant In Place Rebuilds Table Permits Concurrent DML Only Modifies Metadata Changing the ROW_FORMAT Changing the KEY_BLOCK_SIZE Setting persistent table statistics Specifying a character set Converting a character set Optimizing a table Rebuilding with the FORCE option Performing a null rebuild Renaming a table Changing the ROW_FORMAT

    ALTER TABLE tbl_name ROW_FORMAT = row_format, ALGORITHM=INPLACE, LOCK=NONE;

    Data is reorganized substantially, making it an expensive operation. For additional information about the ROW_FORMAT option, see Table Options . Changing the KEY_BLOCK_SIZE

    ALTER TABLE tbl_name KEY_BLOCK_SIZE = value, ALGORITHM=INPLACE, LOCK=NONE;

    Data is reorganized substantially, making it an expensive operation. For additional information about the KEY_BLOCK_SIZE option, see Table Options . Setting persistent table statistics options

    ALTER TABLE tbl_name STATS_PERSISTENT=0, STATS_SAMPLE_PAGES=20, STATS_AUTO_RECALC=1, ALGORITHM=INPLACE, LOCK=NONE;

    Only modifies table metadata. Persistent statistics include STATS_PERSISTENT , STATS_AUTO_RECALC , and STATS_SAMPLE_PAGES . For more information, see Section 15.8.10.1, “Configuring Persistent Optimizer Statistics Parameters” . Specifying a character set

    ALTER TABLE tbl_name CHARACTER SET = charset_name, ALGORITHM=INPLACE, LOCK=NONE;

    Rebuilds the table if the new character encoding is different. Converting a character set

    ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name, ALGORITHM=COPY;

    Rebuilds the table if the new character encoding is different. Optimizing a table

    OPTIMIZE TABLE tbl_name;

    In-place operation is not supported for tables with FULLTEXT indexes. The operation uses the INPLACE algorithm, but ALGORITHM and LOCK syntax is not permitted. Rebuilding a table with the FORCE option

    ALTER TABLE tbl_name FORCE, ALGORITHM=INPLACE, LOCK=NONE;

    Uses ALGORITHM=INPLACE as of MySQL 5.6.17 . ALGORITHM=INPLACE is not supported for tables with FULLTEXT indexes. Performing a "null" rebuild

    ALTER TABLE tbl_name ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE;

    Uses ALGORITHM=INPLACE as of MySQL 5.6.17. ALGORITHM=INPLACE is not supported for tables with FULLTEXT indexes. Renaming a table

    ALTER TABLE old_tbl_name RENAME TO new_tbl_name, ALGORITHM=INSTANT;

    Renaming a table can be performed instantly or in place. MySQL renames files that correspond to the table tbl_name without making a copy. (You can also use the RENAME TABLE statement to rename tables. See Section 13.1.36, “RENAME TABLE Statement” .) Privileges granted specifically for the renamed table are not migrated to the new name. They must be changed manually. The following table provides an overview of online DDL support for tablespace operations. For details, see Syntax and Usage Notes .

    Table 15.22 Online DDL Support for Tablespace Operations

    Operation Instant In Place Rebuilds Table Permits Concurrent DML Only Modifies Metadata Renaming a general tablespace Enabling or disabling general tablespace encryption Enabling or disabling file-per-table tablespace encryption Renaming a general tablespace

    ALTER TABLESPACE tablespace_name RENAME TO new_tablespace_name;

    ALTER TABLESPACE ... RENAME TO uses the INPLACE algorithm but does not support the ALGORITHM clause. Enabling or disabling general tablespace encryption

    ALTER TABLESPACE tablespace_name ENCRYPTION='Y';

    ALTER TABLESPACE ... ENCRYPTION uses the INPLACE algorithm but does not support the ALGORITHM clause. For related information, see Section 15.13, “InnoDB Data-at-Rest Encryption” . Enabling or disabling file-per-table tablespace encryption

    ALTER TABLE tbl_name ENCRYPTION='Y', ALGORITHM=COPY;

    For related information, see Section 15.13, “InnoDB Data-at-Rest Encryption” . With the exception of some ALTER TABLE partitioning clauses, online DDL operations for partitioned InnoDB tables follow the same rules that apply to regular InnoDB tables. Some ALTER TABLE partitioning clauses do not go through the same internal online DDL API as regular non-partitioned InnoDB tables. As a result, online support for ALTER TABLE partitioning clauses varies. The following table shows the online status for each ALTER TABLE partitioning statement. Regardless of the online DDL API that is used, MySQL attempts to minimize data copying and locking where possible. ALTER TABLE partitioning options that use ALGORITHM=COPY or that only permit “ ALGORITHM=DEFAULT, LOCK=DEFAULT ” , repartition the table using the COPY algorithm. In other words, a new partitioned table is created with the new partitioning scheme. The newly created table includes any changes applied by the ALTER TABLE statement, and table data is copied into the new table structure.

    Table 15.23 Online DDL Support for Partitioning Operations

    Partitioning Clause Instant In Place Permits DML Notes PARTITION BY Permits ALGORITHM=COPY , LOCK={DEFAULT|SHARED|EXCLUSIVE} ADD PARTITION ALGORITHM=INPLACE, LOCK={DEFAULT|NONE|SHARED|EXCLUSISVE} is supported for RANGE and LIST partitions, ALGORITHM=INPLACE, LOCK={DEFAULT|SHARED|EXCLUSISVE} for HASH and KEY partitions, and ALGORITHM=COPY, LOCK={SHARED|EXCLUSIVE} for all partition types. Does not copy existing data for tables partitioned by RANGE or LIST . Concurrent queries are permitted with ALGORITHM=COPY for tables partitioned by HASH or LIST , as MySQL copies the data while holding a shared lock. DROP PARTITION ALGORITHM=INPLACE, LOCK={DEFAULT|NONE|SHARED|EXCLUSIVE} is supported. Does not copy data for tables partitioned by RANGE or LIST . DROP PARTITION with ALGORITHM=INPLACE deletes data stored in the partition and drops the partition. However, DROP PARTITION with ALGORITHM=COPY or old_alter_table=ON rebuilds the partitioned table and attempts to move data from the dropped partition to another partition with a compatible PARTITION ... VALUES definition. Data that cannot be moved to another partition is deleted. DISCARD PARTITION Only permits ALGORITHM=DEFAULT , LOCK=DEFAULT IMPORT PARTITION Only permits ALGORITHM=DEFAULT , LOCK=DEFAULT TRUNCATE PARTITION Does not copy existing data. It merely deletes rows; it does not alter the definition of the table itself, or of any of its partitions. COALESCE PARTITION ALGORITHM=INPLACE, LOCK={DEFAULT|SHARED|EXCLUSIVE} is supported. REORGANIZE PARTITION ALGORITHM=INPLACE, LOCK={DEFAULT|SHARED|EXCLUSIVE} is supported. EXCHANGE PARTITION ANALYZE PARTITION CHECK PARTITION OPTIMIZE PARTITION ALGORITHM and LOCK clauses are ignored. Rebuilds the entire table. See Section 24.3.4, “Maintenance of Partitions” . REBUILD PARTITION ALGORITHM=INPLACE, LOCK={DEFAULT|SHARED|EXCLUSIVE} is supported. REPAIR PARTITION REMOVE PARTITIONING Permits ALGORITHM=COPY , LOCK={DEFAULT|SHARED|EXCLUSIVE} Non-partitioning online ALTER TABLE operations on partitioned tables follow the same rules that apply to regular tables. However, ALTER TABLE performs online operations on each table partition, which causes increased demand on system resources due to operations being performed on multiple partitions. For additional information about ALTER TABLE partitioning clauses, see Partitioning Options , and Section 13.1.9.1, “ALTER TABLE Partition Operations” . For information about partitioning in general, see Chapter 24, Partitioning .
     
    推荐文章
    逆袭的黑框眼镜  ·  pycharm终端不是内部或外部命令,也不是可运行的程序 - CSDN文库
    7 月前
    暴走的毛衣  ·  osg如何读取msh文件 - CSDN文库
    9 月前
    性感的毛豆  ·  通过VBA,当在EXCEL单元格中输入任意的日期格式时,都能自动转换为指定的标准格式的日期值 - 知乎
    1 年前
    犯傻的菠萝  ·  映射 Active Directory 实例 - Win32 apps | Microsoft Learn
    1 年前
    暗恋学妹的柑橘  ·  JSONPath Support | Kubernetes
    1 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    Code - 代码工具平台
    © 2024 ~ 沪ICP备11025650号