查询数学运算与在 mysql 数据库中的固定列上使用更新触发器
Querying math operations vs using an update trigger on fixed column in mysql database
我有一个包含两个数值的 table,我将在数千个条目中查询这两个值之间的差异。我有两个选择:
- 直接查询差价如
SELECT (column_1 - column_2) as 'DIFFERENCE' FROM 'Table_Name'
- 要有一个自动更新固定 'difference' 列的更新触发器,这样我就可以直接查询差异列
正如我之前提到的,我可能会查询数万个条目,因此选项 1 可能代表某种超载,而选项 2 仅在必要时执行减法。
虽然我不是数据库性能优化方面的专家,所以也许我遗漏了一些有更多经验的人可以指出的东西。
提前致谢。
另一种选择是 generated column
例如
ALTER TABLE table_name ADD difference GENERATED ALWAYS AS (column_1 - column_2)
您可以选择将STORED
关键字添加到ALTER TABLE
命令的末尾,以确保该值被计算一次(在INSERT
和UPDATE
操作上),或者您可以省略它(或添加 VIRTUAL
关键字)以指示在读取时应计算该列。使用 VIRTUAL
就像您的选项 1; STORED
就像你的选项 2.
这是一个小的生成列 demo on dbfiddle。
如果您的 MySQL/MariaDB 版本没有 "generated columns",那么请不要预先计算差异。触发器(或其他)的成本和复杂性远远超过简单地重新计算每个需要它的 SELECT
的差异。 GENERATED VIRTUAL
可能只是一种即时求差的奇特方式。
一般来说,不用担心任何表达式或内置函数调用的开销。与定位行、解析行等的工作相比,它是微不足道的。
我有一个包含两个数值的 table,我将在数千个条目中查询这两个值之间的差异。我有两个选择:
- 直接查询差价如
SELECT (column_1 - column_2) as 'DIFFERENCE' FROM 'Table_Name'
- 要有一个自动更新固定 'difference' 列的更新触发器,这样我就可以直接查询差异列
正如我之前提到的,我可能会查询数万个条目,因此选项 1 可能代表某种超载,而选项 2 仅在必要时执行减法。
虽然我不是数据库性能优化方面的专家,所以也许我遗漏了一些有更多经验的人可以指出的东西。
提前致谢。
另一种选择是 generated column
例如
ALTER TABLE table_name ADD difference GENERATED ALWAYS AS (column_1 - column_2)
您可以选择将STORED
关键字添加到ALTER TABLE
命令的末尾,以确保该值被计算一次(在INSERT
和UPDATE
操作上),或者您可以省略它(或添加 VIRTUAL
关键字)以指示在读取时应计算该列。使用 VIRTUAL
就像您的选项 1; STORED
就像你的选项 2.
这是一个小的生成列 demo on dbfiddle。
如果您的 MySQL/MariaDB 版本没有 "generated columns",那么请不要预先计算差异。触发器(或其他)的成本和复杂性远远超过简单地重新计算每个需要它的 SELECT
的差异。 GENERATED VIRTUAL
可能只是一种即时求差的奇特方式。
一般来说,不用担心任何表达式或内置函数调用的开销。与定位行、解析行等的工作相比,它是微不足道的。