分享更有价值
被信任是一种快乐

怎么测试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: 0mysql>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: PRIMARYSeq_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: nameSeq_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: NULL2 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: 0ysql>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: 0mysql>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秒加字段功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是云技术,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: MySQL优化的方法是什么

这篇文章主要介绍“MySQL优化的方法是什么”,在日常操作中,相信很多人在MySQL优化的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL优化的方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!硬件层…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册