首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:何时计算虚拟生成的列的值?

问MySQL:何时计算虚拟生成的列的值?
EN

Stack Overflow用户
提问于 2018-06-14 18:32:47
回答 1查看 340关注 0票数 5

假设我有一个表t,它有4个普通列-- n1、n2、n3、n4和1个虚拟计算列c1。如果我运行以下查询:

代码语言:javascript
复制
select n1, n2 from t;

,是否计算了每一行的c1值,即使我没有将其包括在所选择的列中?

根据官方的MySQL文档,这里https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html:

虚拟:列值不被存储,而是在读取行时,在任何前置触发器之后立即进行计算。

上面写着,rows are read,而不是columns are read。因此,混乱。

实际上,这是我的实际情况:我从上面描述的这样一个表中选择(no where子句),它非常慢(与其他类似的表相比)。我没有选择计算列,但我猜想它仍在计算中,这会导致缓慢。

EN

回答 1

Stack Overflow用户

发布于 2021-06-28 18:43:47

​

MySQL中虚拟的定义

从列定义中包含的表达式计算值的列。列值不存储,而是在读取行时,在任何BEFORE触发器之后立即计算。虚拟列不需要存储。

InnoDB支持生成的虚拟列上的辅助索引。

虚拟:列值不是存储的,而是在读取行时实际计算的,而存储列中的值是计算和存储的,因此需要磁盘空间。每次评估都是虚拟的

代码语言:javascript
复制
select n1, n2 from t;

这里,n1和n2是虚拟列。它们不被存储,但只在查询结果持续存在之前使用。暂存

​

中的概述

  • 虚拟生成的列不会占用任何磁盘空间。
  • 虚拟生成的列是INPLACE操作,这意味着表定义无需重新记录所有数据即可更改。
  • 虚拟生成的列值是在读取操作和触发器之前动态计算的。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50863821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档