前言
KingbaseES 作为能兼容 Oracle 的企业级数据库,提供了从 SQL 语句改写、执行计划干预到结果集缓存的优化手段。本文介绍 Query Mapping、物化视图、并行查询、函数结果集缓存等关键调优手段。
一、Query Mapping:SQL'智能替换'
Query Mapping 允许提前定义源 SQL 和目标 SQL 的对应关系,输入 SQL 匹配后自动替换执行,无需修改应用代码。
核心特性与适用场景
- 支持两种匹配级别:TEXT 级保留原始语法和注释;SEMANTICS 级进行语法语义校验。
- 常见用法:将低效 SQL 改写为等价高效语句、异构数据库迁移时做语法转换、批量调整查询条件。
实战代码示例
1. 开启功能
在 kingbase.conf 中配置并重启数据库:
enable_query_rule = on
2. 优化过滤条件
创建映射规则减少结果集大小:
CREATE QUERY RULE('qm1', 'SELECT id, val FROM t1 WHERE id < $1', 'SELECT id FROM t1 WHERE id < ($1 - 5)', true, 'text');
-- 实际执行的是:SELECT id FROM t1 WHERE id < 5
SELECT id, val FROM t1 WHERE id < 10;
3. UNION 转 UNION ALL
避免不必要的去重操作:
CREATE QUERY RULE('union_opt', 'SELECT * FROM t1 UNION SELECT * FROM t2', 'SELECT * FROM t1 UNION ALL SELECT * FROM t2', true, 'semantics');
SELECT * FROM t1 UNION SELECT * FROM t2;
4. 条件下推
将条件下推到子查询中减少中间数据量:
CREATE QUERY RULE('push_down', , , , );
() t1, ( t2 val t1 val ) v t1.id v.id;


