gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:00:01 25 4
gpt4 key购买 nike

假设我有一张 table 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 :

VIRTUAL: Column values are not stored, but are evaluated when rows are read, immediately after any BEFORE triggers.



它说, rows are read ,不是 columns are read .因此,困惑。

为了将其置于现实中,这是我的实际情况:
我从上面描述的这样的表中选择(没有 where 子句),它真的很慢(与其他类似的表相比)。我没有选择计算列,但我猜测它仍在计算中,导致速度缓慢。

最佳答案

MySQL中VIRTUAL的定义
根据列定义中包含的表达式计算其值的列。列值不会被存储,但会在读取行时立即计算,紧跟在任何 BEFORE 之后触发器。虚拟列不占用存储空间。

InnoDB supports secondary indexes on generated virtual columns.


虚拟 :列值不会被存储,而是在读取行时虚拟地进行评估,这与在 STORED 列中评估和存储值不同,因此需要磁盘空间。每次都评估 VIRTUAL
select n1, n2 from t;

Here n1 and n2 are VIRTUAL columns. They are not stored but are only used until query results persist. Its temporary storage



总结
  • 虚拟生成的列不会占用任何磁盘空间。
  • 虚拟生成的列是 INPLACE操作,这意味着无需重新复制所有数据即可更改表定义。
  • 虚拟生成列的值是在读取操作和 BEFORE 触发器期间动态计算的。
  • 关于MySQL:何时计算虚拟生成列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50863821/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com