我有两个数值的表,我会查询过成千上万个条目,这两个值之间的差异。我有两个选择:
SELECT (column_1 - column_2) as 'DIFFERENCE' FROM 'Table_Name'
正如我之前提到的,我将可能查询条目数以万计的,所以也许选项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的版本不具有“生成列”,那就不必预先计算的差异。一个触发(或其他)的成本和复杂性远远超过简单地重新计算在每一个需要它SELECT
的差异。 GENERATED VIRTUAL
是可能做对飞的区别只是一个奇特的方式。
在一般情况下,不用担心任何表情或内建函数调用的成本。相比定位行,解析它,等它的努力是微不足道