千家信息网

怎么测试MySQL8.0.16秒加字段功能

发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,这篇文章主要讲解了"怎么测试MySQL8.0.16秒加字段功能",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么测试MySQL8.0.16秒加字段功能
千家信息网最后更新 2025年02月24日怎么测试MySQL8.0.16秒加字段功能

这篇文章主要讲解了"怎么测试MySQL8.0.16秒加字段功能",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么测试MySQL8.0.16秒加字段功能"吧!

Instant add column功能自MySQL 8.0.12版本引入,INSTANT操作仅修改数据字典中的元数据。在准备和执行期间,

不会在表上采用独占元数据锁,并且表数据不受影响,从而使操作立即生效。允许并发DML。

InnoDB仅支持INSTANT进行如下操作:

Change index option 更改索引选项

Rename table (in ALTER way) 重命名表(以ALTER方式)

SET/DROP DEFAULT 设置/删除缺省值

Add columns(non-generated) - We call this instant ADD COLUMN 添加列(非生成) - 我们称之为立即加列

MODIFY COLUMN 修改列

Add/drop virtual columns 添加/删除虚拟列

添加新列作为表中的最后一列。

添加生成的虚拟列。

删除生成的虚拟列。

设置现有列的默认值。

删除现有列的默认值。

更改具有ENUM或SET数据类型的列所允许的值列表。要求是列的存储大小不会更改。

instant功能存在的限制:

仅支持在一个语句中添加列,即如果同一语句中存在其他非INSTANT操作,则无法立即执行

innodb行格式不能是COMPRESSED。

该表上不能有全文索引。

即时添加的列不能是PK。

只能顺序加列,仅支持在最后添加列,而不支持在现有列的中间添加列

不支持压缩表

不支持包含任何全文索引的表

不支持临时表,临时表只能使用copy的方式执行DDL

不支持那些在数据词典表空间中创建的表

数据字典中的表不能使用instant算法

实验如下:

mysql> CREATE TABLE `test` (

-> `ID` int(11) NOT NULL AUTO_INCREMENT,

-> `NAME` varchar(50) NOT NULL,

-> PRIMARY KEY (`ID`)

-> ) AUTO_INCREMENT=1000;

Query OK, 0 rows affected (0.19 sec)

mysql>delimiter $$

mysql> create procedure pro_test()

-> begin

-> declare id int;

-> set id = 100000;

-> while id>0 do

-> insert into test(name) values ('love');

-> set id = id-1;

-> end while;

-> end $$

Query OK, 0 rows affected (0.04 sec)

mysql>delimiter ;

mysql>call pro_test();

mysql>call pro_test();

mysql>call pro_test();

mysql>call pro_test();

mysql>call pro_test();

mysql>call pro_test();

mysql>call pro_test();

多执行几次,生成更多的数据量。

mysql>select count(*) from test;

+----------+

| count(*) |

+----------+

| 20547289 |

+----------+

1 row in set (1 min 6.85 sec)

秒加字段测试:

mysql>alter table test add addr varchar(10),ALGORITHM=INSTANT;

Query OK, 0 rows affected (4.06 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql>ALTER TABLE test ADD COLUMN c ENUM('a', 'b', 'c'), ALGORITHM = INSTANT;

Query OK, 0 rows affected (0.12 sec)

Records: 0 Duplicates: 0 Warnings: 0

第一次用了4.06秒,第二次用了0.12秒

重命名:

mysql>ALTER TABLE test RENAME TO t2, ALGORITHM = INSTANT;

Query OK, 0 rows affected (0.19 sec)

mysql>ALTER TABLE t2 RENAME TO test, ALGORITHM = INSTANT;

Query OK, 0 rows affected (0.10 sec)

设置列缺省值:

mysql>ALTER TABLE test ALTER COLUMN name SET DEFAULT 100, ALGORITHM = INSTANT;

Query OK, 0 rows affected (0.09 sec)

Records: 0 Duplicates: 0 Warnings: 0

删除列缺省值:

mysql>ALTER TABLE test alter COLUMN name DROP DEFAULT, ALGORITHM = INSTANT;

Query OK, 0 rows affected (0.13 sec)

Records: 0 Duplicates: 0 Warnings: 0

修改列:

mysql>ALTER TABLE test MODIFY COLUMN c ENUM('a', 'b', 'c', 'd', 'e'), ALGORITHM=INSTANT;

Query OK, 0 rows affected (0.09 sec)

Records: 0 Duplicates: 0 Warnings: 0

更改索引,适用于表上已有索引:

mysql>>show index from test \G

*************************** 1. row ***************************

Table: test

Non_unique: 0

Key_name: PRIMARY

Seq_in_index: 1

Column_name: ID

Collation: A

Cardinality: 19998192

Sub_part: NULL

Packed: NULL

Null:

Index_type: BTREE

Comment:

Index_comment:

Visible: YES

Expression: NULL

*************************** 2. row ***************************

Table: test

Non_unique: 1

Key_name: name

Seq_in_index: 1

Column_name: NAME

Collation: A

Cardinality: 1

Sub_part: NULL

Packed: NULL

Null:

Index_type: BTREE

Comment:

Index_comment:

Visible: YES

Expression: NULL

2 rows in set (0.04 sec)

mysql>ALTER TABLE test DROP index name, ADD index name(name),ALGORITHM = INSTANT;

Query OK, 0 rows affected (0.13 sec)

Records: 0 Duplicates: 0 Warnings: 0

但在其他无索引的列上加新索引是不支持的:

mysql>alter table test ADD index addr(addr),ALGORITHM = INSTANT;

ERROR 1845 (0A000): ALGORITHM=INSTANT is not supported for this operation.

Try ALGORITHM=COPY/INPLACE.

增加虚拟列:

ALTER TABLE test ADD COLUMN (d INT GENERATED ALWAYS AS (1 + 1) VIRTUAL), ALGORITHM = INSTANT;

Query OK, 0 rows affected (2.83 sec)

Records: 0 Duplicates: 0 Warnings: 0

ysql>desc test;

+-------+---------------------------+------+-----+---------+-------------------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------------------------+------+-----+---------+-------------------+

| ID | int(11) | NO | PRI | NULL | auto_increment |

| NAME | varchar(50) | NO | | NULL | |

| addr | varchar(10) | YES | | NULL | |

| ip | int(11) | YES | | NULL | |

| c | enum('a','b','c','d','e') | YES | | NULL | |

| d | int(11) | YES | | NULL | VIRTUAL GENERATED |

+-------+---------------------------+------+-----+---------+-------------------+

删除虚拟列:

mysql>ALTER TABLE test DROP COLUMN d, ALGORITHM = INSTANT;

Query OK, 0 rows affected (0.48 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql>desc test;

+-------+---------------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------------------------+------+-----+---------+----------------+

| ID | int(11) | NO | PRI | NULL | auto_increment |

| NAME | varchar(50) | NO | MUL | NULL | |

| addr | varchar(10) | YES | | NULL | |

| ip | int(11) | YES | | NULL | |

| c | enum('a','b','c','d','e') | YES | | NULL | |

+-------+---------------------------+------+-----+---------+----------------+

5 rows in set (0.04 sec)

但删除普通列不支持:

mysql>ALTER TABLE test DROP c, ALGORITHM = INSTANT;

ERROR 1845 (0A000): ALGORITHM=INSTANT is not supported for this operation.

Try ALGORITHM=COPY/INPLACE.

另外,用户还可以通过来自information_schema的视图观察即时ADD COLUMN的结果:

mysql>SELECT table_id, name, instant_cols FROM information_schema.innodb_tables WHERE name LIKE 'test%';

+----------+----------------+--------------+

| table_id | name | instant_cols |

+----------+----------------+--------------+

| 1060 | test/child | 0 |

| 1064 | test/t1 | 0 |

| 1065 | test/tbl | 0 |

| 1068 | test/employees | 0 |

| 1072 | test/test_null | 0 |

| 1073 | test/test | 2 |

+----------+----------------+--------------+

6 rows in set (0.00 sec)

感谢各位的阅读,以上就是"怎么测试MySQL8.0.16秒加字段功能"的内容了,经过本文的学习后,相信大家对怎么测试MySQL8.0.16秒加字段功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

支持 数据 索引 功能 字段 测试 生成 学习 全文 内容 字典 方式 更多 语句 普通 可以通过 大小 就是 思路 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 兔子ip服务器地址 达州国家网络安全宣传周活动 机架式服务器专业维修 有关儿童网络安全的问答 广州天眼互联网科技双休 java做网站web服务器 常见的网络安全危害有 国家网络安全为主题的海报 一年级小学生网络安全画报 数据库数据多插入数据慢 远程指导软件开发哪些优势 怎么进入别人服务器 省网络安全责任制检查考核制度 pptp服务器 sql连接其他数据库失败 软件开发时期有哪几个阶段 幼儿园网络安全档案有哪些 模型驱动的软件开发方法学 招远微信公众号软件开发公司 镜像根服务器 成都玖崟互联网科技有限公司靠谱吗 网络安全整体技术防护方案 公安网络安全检查通知 软件开发模型中的瀑布模型 济南安卓软件开发招聘网 华南农业大学数据库怎么用 电子科技互联网工程师是做什么的 智慧社区软件开发招标文件 当前全球性网络安全事件频发 吴中区什么是网络技术创新服务
0