MySQL 5.7 虚拟列 (virtual columns)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 5.7 虚拟列 (virtual columns)相关的知识,希望对你有一定的参考价值。

参考资料:

Generated Columns in MySQL 5.7.5

MySQL 5.7新特性之Generated Column(函数索引)

MySQL 5.7原生JSON格式支持

 

Generated Column

mysql 5.7中,支持两种Generated Column,即Virtual Generated Column和Stored Generated Column,前者只将Generated Column保存在数据字典中(表的元数据),并不会将这一列数据持久化到磁盘上;后者会将Generated Column持久化到磁盘上,而不是每次读取的时候计算所得。很明显,后者存放了可以通过已有数据计算而得的数据,需要更多的磁盘空间,与Virtual Column相比并没有优势,因此,MySQL 5.7中,不指定Generated Column的类型,默认是Virtual Column。

如果需要Stored Generated Golumn的话,可能在Virtual Generated Column上建立索引更加合适

综上,一般情况下,都使用Virtual Generated Column,这也是MySQL默认的方式

 

语法:

<type> [ GENERATED ALWAYS ] AS ( <expression> ) [ VIRTUAL|STORED ]
[ UNIQUE [KEY] ] [ [PRIMARY] KEY ] [ NOT NULL ] [ COMMENT <text> ]

 

应用:

为了实现对json数据中部分数据的索引查询,可以使用MySQL5.7中的虚拟列(virtual column)功能

创建表

create table user(uid int auto_increment,data json,primary key(uid));

 

构建数据

insert into user values (NULL,{"name":"wang","address":"shenyang"});
insert into user values (NULL,{"name":"zhao","address":"riben"});

 

 技术分享

构建姓名的虚拟列

alter table user add user_name varchar(20) generated always as (data->$.name);

 

 技术分享

构建索引

alter table user add index idx_name(user_name);

 

查询

select * from user where user_name="wang";

 

查询分析(explain  ……  \\G)

技术分享

可以看出用了索引了

 

以上是关于MySQL 5.7 虚拟列 (virtual columns)的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 5.7新特性: JSON字段、虚拟列、视图

Cadence Virtual.Component.CO-Design.v2.2-ISO 1CD(虚拟元件协同设计,VCC)

Ubuntu Mysql 5.7 datadir 数据目录的修改

Oracle 虚拟列 子分区 virtual column partition

MySQL数据库必会技能,虚拟列的用法

PL/SQ连接oracle,L 新建表的时候, virtual那一列是啥意思