假设我有一个表t,它有4个普通列-- n1、n2、n3、n4和1个虚拟计算列c1。如果我运行以下查询:
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子句),它非常慢(与其他类似的表相比)。我没有选择计算列,但我猜想它仍在计算中,这会导致缓慢。
发布于 2021-06-28 18:43:47
MySQL中虚拟的定义
从列定义中包含的表达式计算值的列。列值不存储,而是在读取行时,在任何BEFORE触发器之后立即计算。虚拟列不需要存储。
InnoDB支持生成的虚拟列上的辅助索引。
虚拟:列值不是存储的,而是在读取行时实际计算的,而存储列中的值是计算和存储的,因此需要磁盘空间。每次评估都是虚拟的
select n1, n2 from t;这里,n1和n2是虚拟列。它们不被存储,但只在查询结果持续存在之前使用。暂存
中的概述
INPLACE操作,这意味着表定义无需重新记录所有数据即可更改。https://stackoverflow.com/questions/50863821
复制相似问题