当前位置: 首页 > 面试题库 >

使用触发器作为SQL聚合函数的替代方案?

贺自明
2023-03-14
问题内容

我有一个包含数百万行的表,并且经常需要知道其中一列的总数。在查询中使用SUM太慢了,因为它需要触摸整个表。是否有一种万无一失的方法来保持准确的总数而不在每个查询中进行计算?

我曾考虑过在插入,更新或删除行时使用触发器来增加和减少存储的总数。但是(我假设)这样做的一个问题是,如果表被截断,那么总数将不会为零。我可以忍受,但还有其他需要注意的地方吗?或者,如果有更好的方法可以解决此问题,请告诉我。


问题答案:

从理论上讲,只要满足以下条件,触发器就可以保持摘要表的准确更新:

  • 您不禁用触发器
  • 您不直接更新汇总表
  • 您无需通过TRUNCATE TABLE更改源数据(如您所述)

还:

  • 您必须使用正确的初始值为汇总表添加种子
  • 您必须对源表和摘要表都使用InnoDB,因此更新是原子的

维护汇总表是反规范化的一个示例。与所有非规范化一样,这会带来数据异常的风险。您负责维护数据完整性;数据库在帮助您方面有很大的限制。

我建议您需要不时检查汇总表(例如每小时一次就足够了),以确保它没有不同步,如果有,请进行更正。这取决于您,因为数据库无法为您检查它。



 类似资料:
  • 本文向大家介绍SQL中的开窗函数详解可代替聚合函数使用,包括了SQL中的开窗函数详解可代替聚合函数使用的使用技巧和注意事项,需要的朋友参考一下  在没学习开窗函数之前,我们都知道,用了分组之后,查询字段就只能是分组字段和聚合的字段,这带来了极大的不方便,有时我们查询时需要分组,又需要查询不分组的字段,每次都要又到子查询,这样显得sql语句复杂难懂,给维护代码的人带来很大的痛苦,然而开窗函数出现了,

  • 主要内容:1.COUNT函数,2. SUM函数,3. AVG函数,4. MAX函数,5. MIN函数SQL聚合函数用于对表的单个列的多行执行计算,它只返回一个值。它还用于汇总数据。 SQL聚合函数的类型,如下图所示 - 接下来,我们一个个地讲解。 1.COUNT函数 函数用于计算数据库表中的行数,它可以在数字和非数字数据类型上工作。 函数使用返回指定表中所有行的计数。 包函重复值和值。 语法 假设有一个表,它的结构和数据如下所示 - PRODUCT COMPANY QTY RATE COST I

  • 查看SQL的ANSI聚合函数,我找不到字符串的任何东西。但是,每个数据库似乎都有自己的数据库,例如MySQL和Oracle的GROUP_CONCAT和LISTAGG,这使得可移植性有点困难。我是不是缺了什么?这是有原因的吗?

  • 在本教程中,将了解和学习SQL Server聚合函数以及如何使用它们来计算聚合。 聚合函数执行一个或多个值的计算并返回单个值。 聚合函数通常与SELECT语句的GROUP BY子句和HAVING子句一起使用。 下表显示了SQL Server中的聚合函数: 编号 聚合函数 描述 1 AVG()函数 函数用于计算集合中非值的平均值。 2 CHECKSUM_AGG()函数 函数根据一组行计算校验和值。

  • 1. 前言 慕课解释:SQL 内置的聚合函数主要用于数据的统计和分析。 本小节,我们将一起学习 SQL 中的聚合函数。 数据统计和分析是挖掘数据规律、发现数据特征的主要手段,SQL 虽然无法直接分析数据,但是提供基本聚合函数来帮助开发者做数据挖掘。 本小节测试数据如下,请先在数据库中执行: DROP TABLE IF EXISTS imooc_user; CREATE TABLE imooc_us

  • 一、简单聚合 1.1 数据准备 // 需要导入 spark sql 内置的函数包 import org.apache.spark.sql.functions._ val spark = SparkSession.builder().appName("aggregations").master("local[2]").getOrCreate() val empDF = spark.read.jso