eup*_*a83 5 mysql calculated-columns
假设我有一个t包含 4 个普通列n1、n2、n3和n41 个虚拟计算列 的表c1。如果我运行以下查询:
select n1, n2 from t;
Run Code Online (Sandbox Code Playgroud)
,是为每行计算的值c1,即使我没有将其包含在我选择的列中?
根据这里的官方 MySQL 文档https://dev.mysql.com/doc/refman/5.7/en/create-table- generated-columns.html :
VIRTUAL:不存储列值,而是在任何 BEFORE 触发器之后读取行时立即计算列值。
它说,,rows are read不是columns are read。因此,混乱。
为了在现实中实现这一点,这是我的实际情况:我正在从如上所述的表中进行选择(没有 where 子句),并且它非常慢(与其他类似的表相比)。我没有选择计算列,但我猜测它仍在计算中,导致速度缓慢。
其值根据列定义中包含的表达式计算得到的列。列值不会被存储,而是在任何触发器之后读取行时立即进行评估BEFORE。虚拟列不占用存储空间。
InnoDB 支持在生成的虚拟列上建立二级索引。
VIRTUAL:不存储列值,而是在读取行时虚拟地评估列值,这与 STORED 列不同,在STORED列中评估和存储值,因此需要磁盘空间。每次都会评估 VIRTUAL
select n1, n2 from t;
Run Code Online (Sandbox Code Playgroud)
这里 n1 和 n2 是虚拟列。它们不会被存储,而是仅在查询结果持久存在之前使用。它的临时存储
总之
INPLACE指更改表定义而无需重新复制所有数据的操作。| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |