[DB] Early Materialization vs. Late Materialization

打印 上一主题 下一主题

主题 720|帖子 720|积分 2160

Early Materialization vs. Late Materialization

这两种 物化计谋(Materialization Strategies) 决定了数据库在实行查询时,如那边理操纵符的输出数据。

1. Early Materialization(早期物化)

界说

在 Early Materialization 中,查询操纵符(如 Join 或 Filter)在操纵完成后,直接把完整的输出数据复制到结果元组中。
优点



  • 数据完整性: 后续操纵符不需要再次访问基础表就能获取全部需要的数据。
  • 简单性: 每个操纵符的输出就是终极需要的数据,后续操纵可以直接处理。
缺点



  • 冗余数据: 如果查询只需要一部分字段,但 Join 等操纵复制了完整的元组,这会浪费内存和 I/O 资源。
  • 开销较高: 需要在每一步操纵中处理完整的元组数据。

案例:Early Materialization

查询示例:
  1. SELECT R.id, S.cdate
  2. FROM R
  3. JOIN S ON R.id = S.id
  4. WHERE S.value > 100;
复制代码
表布局:


  • 表 R: (id, name)
  • 表 S: (id, value, cdate)
步调:

  • Join 操纵

    • 将表 R 和 S 举行毗连,输出包罗全部属性的完整元组:
      1. R.id | R.name | S.id | S.value | S.cdate
      2. ---------------------------------------
      3. 123  | abc    | 123  | 1000    | 11/4/2024
      4. 123  | abc    | 123  | 2000    | 11/4/2024
      复制代码

  • 过滤操纵

    • 应用过滤条件 S.value > 100,过滤掉不符合条件的元组。
      1. R.id | R.name | S.id | S.value | S.cdate
      2. ---------------------------------------
      3. 123  | abc    | 123  | 1000    | 11/4/2024
      4. 123  | abc    | 123  | 2000    | 11/4/2024
      复制代码

  • 投影操纵

    • 终极只保留需要的字段 R.id 和 S.cdate:
      1. R.id | S.cdate
      2. ----------------
      3. 123  | 11/4/2024
      4. 123  | 11/4/2024
      复制代码


2. Late Materialization(延长物化)

界说

在 Late Materialization 中,查询操纵符的输出只包罗用于匹配的 Join 键以及元组的记录 ID(Record ID),而不会直接复制全部字段。
优点



  • 高效: 制止复制不必要的数据,尤其在列式存储中,不需要的列不会被加载。
  • 灵活性: 当终极需要的数据较少时,可以显著淘汰内存和盘算开销。
缺点



  • 需要额外查表: 如果后续操纵需要其他字段,可能需要再次访问基础表获取数据。

案例:Late Materialization

查询示例:
  1. SELECT R.id, S.cdate
  2. FROM R
  3. JOIN S ON R.id = S.id
  4. WHERE S.value > 100;
复制代码
表布局:


  • 表 R: (id, name)
  • 表 S: (id, value, cdate)
步调:

  • Join 操纵

    • 输出仅包罗毗连键和记录 ID:
      1. R.id | S.RecordID
      2. -----------------
      3. 123  | 1
      4. 123  | 2
      复制代码

  • 过滤操纵

    • 应用过滤条件 S.value > 100,结果:
      1. R.id | S.RecordID
      2. -----------------
      3. 123  | 1
      4. 123  | 2
      复制代码

  • 数据提取(Materialization)

    • 在投影阶段,根据 RecordID 从基础表中提取 S.cdate:
      1. R.id | S.cdate
      2. ----------------
      3. 123  | 11/4/2024
      4. 123  | 11/4/2024
      复制代码


通俗比喻

1. Early Materialization(提前打包)

比喻:快递打包


  • 你在堆栈操纵时,直接把需要送的物品打包好放到车上。
  • 优点: 后续操纵(比如配送)不需要回堆栈重新拿物品。
  • 缺点: 如果你打包的东西多了,可能会浪费空间或资源。
2. Late Materialization(延长打包)

比喻:先装清单,后取货


  • 你在堆栈先列清单(只记录订单号和货架位置),送货时再根据清单去堆栈取对应的物品。
  • 优点: 清单很轻,不占用太多空间,后续只拿需要的物品。
  • 缺点: 可能需要多次返回堆栈取货。

适用场景对比

特点Early MaterializationLate Materialization适用存储行式存储(Row Stores)列式存储(Column Stores)操纵复杂度每步操纵处理完整元组,开销较高每步只处理毗连键和记录 ID,淘汰冗余数据访问需求后续操纵需要的字段较多,适合一次性物化后续只需要少量字段,可以延长加载内存利用占用内存多,容易造成浪费占用内存少,适合大数据集
总结



  • Early Materialization: 提前加载全部需要的数据,制止后续查表,适合行式存储和复杂查询。
  • Late Materialization: 只输出毗连键和记录 ID,按需加载需要的数据,适合列式存储和聚焦字段较少的查询。
  • 数据库优化器会根据查询筹划和存储模式选择最优的物化计谋,提拔性能和资源利用率。
Cost Analysis of Joins

In database systems, Join operations are crucial for combining tables, and their cost (measured in I/O operations) is a key factor in query optimization. Here's a detailed breakdown:



 This is preview

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表