查询数学运算与在 mysql 数据库中的固定列上使用更新触发器

Querying math operations vs using an update trigger on fixed column in mysql database

我有一个包含两个数值的 table,我将在数千个条目中查询这两个值之间的差异。我有两个选择:

  1. 直接查询差价如SELECT (column_1 - column_2) as 'DIFFERENCE' FROM 'Table_Name'
  2. 要有一个自动更新固定 'difference' 列的更新触发器,这样我就可以直接查询差异列

正如我之前提到的,我可能会查询数万个条目,因此选项 1 可能代表某种超载,而选项 2 仅在必要时执行减法。

虽然我不是数据库性能优化方面的专家,所以也许我遗漏了一些有更多经验的人可以指出的东西。

提前致谢。

另一种选择是 generated column 例如

ALTER TABLE table_name ADD difference GENERATED ALWAYS AS (column_1 - column_2)

您可以选择将STORED关键字添加到ALTER TABLE命令的末尾,以确保该值被计算一次(在INSERTUPDATE操作上),或者您可以省略它(或添加 VIRTUAL 关键字)以指示在读取时应计算该列。使用 VIRTUAL 就像您的选项 1; STORED 就像你的选项 2.

这是一个小的生成列 demo on dbfiddle

如果您的 MySQL/MariaDB 版本没有 "generated columns",那么请不要预先计算差异。触发器(或其他)的成本和复杂性远远超过简单地重新计算每个需要它的 SELECT 的差异。 GENERATED VIRTUAL 可能只是一种即时求差的奇特方式。

一般来说,不用担心任何表达式或内置函数调用的开销。与定位行、解析行等的工作相比,它是微不足道的。