MySQL 存储的生成列与 MySQL 虚拟的生成列有何不同?

mysqlmysqli database

以下是 MySQL 存储的生成列和 MySQL 虚拟的生成列之间的一些基本区别 −

就磁盘空间而言

如果我们看到磁盘空间方面的差异,则虚拟生成的列不会占用任何磁盘空间。另一方面,存储的生成列会占用磁盘空间。

就操作而言

如果我们看到操作方面的差异,则虚拟生成的列是 INPLACE 操作,这意味着无需重新复制所有数据即可更改表定义。另一方面,存储生成的列是一种复制操作,其成本与向表中添加新列的成本相同。

在计算方面

在虚拟生成的列中,值是在读取操作和 BEFORE 触发器期间动态计算的。另一方面,在存储生成的列中,值在每个 INSERT 和 UPDATE 语句中更新。

何时使用

我们应该考虑对发生大量更改的数据使用虚拟列。虚拟列的成本来自不断读取表,服务器必须每次计算该列的值。另一方面,当数据在创建后没有发生重大变化或根本没有变化时,我们应该考虑使用存储列。


相关文章