目录

CMU 15-445 Lecture #15: Query Planning & Optimization


CMU 15-445 Database Systems

Lecture #15: Query Planning & Optimization

  • 数据库最复杂的模块之一,论文都在这个上面做功夫

Overview

  • SQL都是声明式的,没有告诉DBMS执行的过程

  • 需要优化器来根据SQL告诉DBMS具体怎么执行

  • 两种流派

    • SQL+优化器
    • 大数据处理框架(flink,spark)+程序员
  • 优化的两种流派

    • Heuristics/Rules
      • 启发式,通过查看catalog来看表的结构/有无索引,从而进行优化
    • Cost-base Search
      • 基于代价的:要估计每一个查询plan的变化,然后进行决策,要知道数据的情况
    • 大部分的数据库会结合这两个流派
  • Logical vs. Physical Plans

    • 逻辑计划都是关系代数级别的
    • 物理计划具体到怎么执行,比如算子怎么执行,是sort join还是hash join
  • 计划的优化是NP难度级别的问题,这门课就是讲的普及

/img/CMU 15-445 Database Systems/chapter15-1.png
例子:逻辑等价优化

Logical Query Optimization

  • 自己要写一些模式上面的规则,让优化器拿着规则去优化,比如JOIN怎么消除,怎么做索引下推

  • 缺点:只能根据规则进行逻辑计划的转换,但是不能根据代价开销去进行优化,很死板

  • Some pattern

    • Perform filters as early as possible (predicate pushdown).
    • Reorder predicates so that the DBMS applies the most selective one first.
    • Breakup a complex predicate and pushing it down (split conjunctive predicates)

Cost Estimations

  • 最大的代价还是磁盘的I/O,这里的优化就是减少I/O

  • postgres:用的”magic”,黑魔法

  • 老牌的商用数据库在优化的时候比开源的要保守和细得多,DB2就会结合事务,锁,用户数整体考虑,pg就比较激进和简单了

  • Selection Statistics

    • 这个就是参数,关系型数据库会对每张表做统计信息,这样你分析才有参数
/img/CMU 15-445 Database Systems/chapter15-2.png
强制立即更新统计信息的命令