【问题标题】:New table (with derived_data) or SQL query?新表(带有derived_data)或SQL 查询?
【发布时间】:2015-08-30 16:24:29
【问题描述】:

从最佳实践的角度来看,是在我的数据库中使用来自其他表的 derived_data 字段创建一个新表,还是每次都使用 SQL 查询计算它更好?

详情: 更准确地说,我有一张表ORDERS(id_order,date,time,sum),我想跟踪每日利润并在管理员每次从下拉菜单中选择它时预览它们。我应该在他每次请求时进行 SQL 查询,还是创建一个新表 PROFITS(date,day_profit),其中的 derived_data 字段从其他表中获取其值?

【问题讨论】:

  • 你可以创建一个视图
  • 这种情况没有“最佳实践”。这取决于您的应用程序要求。

标签: mysql database-design derived-types


【解决方案1】:

对于简单的计算 (a+b),请在 SELECT 中进行。

对于定期计算结果的聚合 (COUNT(sales), SUM(revenue)),构建“汇总表”。

例如,按region 细分的每日计数、总数等。否则需要GROUP BY 等。

请注意,您可以从每日表计算每周或每月总计,因此不要构建更多表。

my Summary Tables blog

对于一千行,这并不重要;对于一百万或十亿来说,“数据仓库”的性能至关重要。

请记住,汇总表是禁忌(对数据库纯粹主义者而言),因为它包含“冗余”数据。因此,您的政策应避免使其不同步。

【讨论】:

    【解决方案2】:

    我可以想到每种技术的优缺点,可以根据哪种技术来决定在什么情况下应该使用哪种技术:

    汇总表:常用于数据仓库,以提高选择查询的性能。

    1. 当汇总数据可重复使用时。
    2. 聚合查询不是 由于大量低粒度数据而表现良好 正在源表中处理。

    直接查询

    1. 当数据没有在多个时间/地点重复使用时

    2. 用户需要每次执行的实时数据。汇总表需要单独的加载逻辑,需要定期安排,这将引入延迟。此外,汇总表还需要从源表中更新的最后一个数据中批量刷新。

    两者结合: 在日级别创建一个汇总表,例如在午夜刷新。从此汇总表中选择聚合数据,并将其与来自午夜之后的汇总表源表中的实时数据结合。同样,根据传入数据的数量及其可重用性,汇总表可能具有周/月/年的粒度级别或全部在单独的表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      相关资源
      最近更新 更多