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

问题描述 投票:0回答:2

我有两个数值的表,我会查询过成千上万个条目,这两个值之间的差异。我有两个选择:

  1. 直接查询的区别就像SELECT (column_1 - column_2) as 'DIFFERENCE' FROM 'Table_Name'
  2. 有一个UPDATE触发器自动更新一个固定的“差异”列,所以我可以那么就直接查询差列

正如我之前提到的,我将可能查询条目数以万计的,所以也许选项1将是某种形式的过载保护,同时选择2只在必要时执行减法。

我对数据库性能优化方面的专家了,所以也许有我丢失的东西,有人用更多的经验可以指出。

提前致谢。

mysql database-design triggers database-trigger
2个回答
1
投票

另一种方法是一个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


1
投票

如果你的MySQL / MariaDB的版本不具有“生成列”,那就不必预先计算的差异。一个触发(或其他)的成本和复杂性远远超过简单地重新计算在每一个需要它SELECT的差异。 GENERATED VIRTUAL是可能做对飞的区别只是一个奇特的方式。

在一般情况下,不用担心任何表情或内建函数调用的成本。相比定位行,解析它,等它的努力是微不足道

© www.soinside.com 2019 - 2024. All rights reserved.