加载中...

查询重写(Query Rewrite)指数据库在优化阶段依据关系代数等价规则,把查询变换为语义相同但更利于执行的形式。它属于逻辑优化,通常在基于代价的物理优化之前进行。
典型规则包括:视图合并(将视图定义内联进主查询)、子查询展开/去关联(把子查询转为连接)、谓词下推与谓词推导(由 a=b 且 b=1 推出 a=1)、外连接消除(条件允许时转为内连接)、IN 转 semi-join、OR 展开为 UNION、常量折叠、无用列与无用连接消除、HAVING 条件下移等。部分数据库还支持利用物化视图改写查询,自动将明细查询重定向到预聚合结果。
重写决定了后续代价优化的搜索空间:子查询若不展开,优化器就无法统一安排连接顺序。许多"手工 SQL 优化技巧"(如改写 EXISTS、拆分 OR)本质上是在替能力不足的优化器完成重写;数据库版本升级带来的性能变化也常源于重写规则的增减。
Oracle 的查询转换器、Calcite 的 rule-based 变换、PostgreSQL 的 rewriter 与优化器前期处理都是该思想的工程体现。

登录 后参与讨论
暂无讨论,来发表第一条评论吧