什么是虚拟列?
在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默认的方式
特殊用途冗余列
列长度还是和定义类型一样
能正常加索引
查询效率上,物理>STORED>VIRTUAL
应用
这里配合5.7开始支持的json,来体验一下虚拟列的使用
1. 创建表
CREATE TABLE user_info (
uid INT(11) NOT NULL AUTO_INCREMENT,
uname VARCHAR(20) NOT NULL DEFAULT '',
other_info json,
PRIMARY KEY(uid)
) ENGINE=INNODB DE