mysql 5.7 generated_mysql 5.7 新特性之 虚拟列 Generated columns

本文介绍了MySQL 5.7中的虚拟列(Generated columns)特性,用于优化GROUP BY操作。当函数导致索引失效时,可以使用虚拟列保存函数计算结果并建立索引,提高查询效率。详细阐述了虚拟列的类型、特点及使用注意事项,并通过案例展示了如何利用虚拟列优化GROUP BY查询。
摘要由CSDN通过智能技术生成

有时候需要对字段上加函数然后进行GROUP BY。使用执行分析,发现出现 Using temporary, 分组条件并没有走索引。因为mysql 5.7 的函数会导致索引失效。我们可以通过添加一个冗余字段来保存函数的计算结果,然后添加索引,这时候的GROUP BY就会走索引了。其实mysql 5.7 提供了一个新特性:虚拟列 Generated columns,我们可以使用虚拟列来方便的达到这个目的。

虚拟列

MySQL的表生成列通常又叫做虚拟列或计算列。这个生成列的值是在列定义时包含了一个计算表达式计算得到的,有两种类型的生成列:

Virtual(虚拟):这个类型的列会在读取表记录时自动计算此列的结果并返回。

Stored(存储):这个类型的列会在表中插入一条数据时自动计算对应的值,并插入到这个列中,那么这个列会作为一个常规列存在表中。虚拟生成列有时候比存储生成列更有用,因为它不会占用存储空间。

1、衍生列的定义可以修改,但virtual和stored之间不能相互转换,必要时需要删除重建

2、虚拟列字段只读,不支持 INSRET 和 UPDATE。

3、只能引用本表的非 generated column 字段,不可以引用其它表的字段。

4、使用的表达式和操作符必须是 Immutable 属性。

5、支持创建索引。

6、可以将已存在的普通列转化为stored类型的衍生列,但virtual类型不行;同样的,可以将stored类型的衍生列转化为普通列,但virtual类型的不行。

7、MySQL可以在衍生列上面创建索引。对于stored类型的衍生列,跟普通列创建索引无区别。

8、对于vi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值