专栏首页浪子编程走四方探索MySQL 5.7 虚拟列 (virtual columns)

探索MySQL 5.7 虚拟列 (virtual columns)

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)

可以看出用了索引了

此时的表的结构由于多出了user_name这一虚拟列,再插入别的数据要注意在表后指明插入列(不能给虚拟列插入数据)

insert into user(uid,data) values (NULL,'{"name":"pan","address":"sichuan"}');

本文分享自微信公众号 - 卡二条的技术圈(qq1005349393),作者:卡二条

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • vagrant打造跨平台可移动的开发环境

    Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。

    A梦多啦A
  • 虚拟机如何开启SSH链接

    作为一个程序开发人员,对与服务器的了解是不必可少的,不管是web端开发还是其他开发人员。但是,对于Linux的服务器的价格比较昂贵,所以很多情况下,我们...

    A梦多啦A
  • MongoDB都有哪些使用的业务场景

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数...

    A梦多啦A
  • 用AI创造AI,人工智能无代码时代来临

    玛丽·雪莱在创作世界上第一部科幻小说《科学怪人》(又译:弗兰肯斯坦)的时候,恐怕没法预见到在一个多世纪后的今天,真的会出现一种脱胎于虚无,却能判断、能决策的存在...

    大数据文摘
  • NLP基础|中英文词向量评测理论与实践

    最近在做词向量相关工作,训练的词向量如何进行评测?本文将从业界使用最广泛的两个评测任务进行阐述,包括相似度任务(word similarity task)和词汇...

    zenRRan
  • day114-Flask启动&Response内容&Request内容&模板语言

    少年包青菜
  • asp.net 伪静态实现(UrlRewritingNet)

    UrlRewritingNet.UrlRewriter源码地址 https://github.com/aspnetde/UrlRewritingNet 部署步骤...

    纯粹是糖
  • LeetCode 522. 最长特殊序列 II

    给定字符串列表,你需要从它们中找出最长的特殊序列。 最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。

    Michael阿明
  • 前端基础-ECMAScript类和对象

    ES6中提供的类实际上只是JS原型模式的包装。现在提供class支持后,对象的创建、继承更加直观。

    cwl_java
  • 比PS还好用!Python 20行代码批量抠图

    你是否曾经想将某张照片中的人物抠出来,然后拼接到其他图片上去,从而可以即使你在天涯海角,我也可以到此一游?

    python学习教程

扫码关注云+社区

领取腾讯云代金券