写点什么

浅析金仓数据库 KingbaseES 的 Query Mapping:无需改代码的 SQL 优化神器

作者:金仓技术
  • 2025-04-24
    四川
  • 本文字数:1459 字

    阅读完需:约 5 分钟

浅析金仓数据库KingbaseES的Query Mapping:无需改代码的 SQL 优化神器

关于 Query Mapping

在 SQL 优化领域,Query Mapping(查询映射)是一种将复杂查询拆解为原子操作的技术。通过定义原始 SQL 与目标 SQL 的映射关系,它能在不修改应用代码的前提下,实现低效语句到高效语句的 “无感替换”。



TEXT 级别



SEMANTICS 级别


KingbaseES 的 Query Mapping:解决 Oracle 用户痛点的 “救命稻草”

Oracle 经典性能陷阱:类型不匹配引发的 “慢启动灾难”

Oracle 在应用启动时需要读取用户权限相关信息,简化的 SQL 如下:

select user_privilege from xxx where ID=$1
复制代码


这是一条很简单的 SQL,似乎并没有什么性能问题。但恰恰是这样一个简单的 SQL,给用户造成非常大的麻烦。

用户 ID 由一串数字构成,设计之初,考虑后续可能存在字符类型的数据,所以将 ID 定义为字符类型数据。应用开发人员在看见数据全为数字类型后,想当然便认为类型应该是数字型,于是将应用变量类型定义为数字类型。这就导致了一个严重的问题“表结构类型的定义与应用变量类型定义不一致”,使得应用无法使用到相关索引,访问效率低下。

在系统系统上线初期数据量不大且用户不多的情况下,用户感知尚且不大。但随着数据量增长,应用每次启动所需时间变得越来越长,系统已慢到无法忍受的地步。

然而此时项目已验收,开发商已离场,应用早已无人维护。怎么办?

可这真的是个难题!

翻遍了数据库的所有功能,只给出了两条不切实际的建议:

方法一:修改应用。这是最好的方法,但显然用户没这个能力。此方法行不通。

方法二:修改表结构定义。可相关联的表的定义要改?有多少本没问题的应用,因为修改定义引发问题?风险太大,不可行。

有人问了,通过 HINT 强制使用索引是否可行?

要知道,HINT 是提示优化器,前提是要能用索引,而这里实际根本用不到索引。因此,厂家提供的 SQL Profile 优化工具在这是没用了。

没辙了……

在这种情况下,如果能有 KingbaseES Query Mapping 功能,这问题不就迎刃而解了吗?


KingbaseES Query Mapping 一键拯救

Query Mapping 是 KingbaseES 提供的性能优化工具,用户可以在不修改应用逻辑的情况下,达到快速解决性能问题的目的。通过语句映射,实现将用户的原始语句根据需要转换成用户想要的语句。

该工具使用简单,且通过内置的系统表记录映射信息,访问非常高效。

具体到实例,只需运行如下命令:

-- 创建映射规则:将原SQL的ID参数转为字符型select create_query_rule(  'qm01', -- 规则名称  'select user_privilege from xxx where ID=$1', -- 原始SQL  'select user_privilege from xxx where ID=$1::text', -- 目标SQL(添加类型转换)  true, -- 启用规则  'text' -- 映射类型(TEXT级别语义转换));
复制代码


通过创建 SQL 映射,优化器在解析 SQL 时,如遇到匹配的 SQL,将自动对 SQL 进行转换,有效地避免了对于 SQL 的修改,整个应用的访问效率得到了非常大的提升。

原来必须通过修改代码的应用,如今仅需通过简单的数据库操作就可以解决。

当然,除了上述的 SQL 转换的例子,Query Mapping 功能还可以广泛应用于其他诸多的场景。例如 DBA 常见的 HINT 调优,也可通过 Query Mapping,实现不修改应用代码即解决性能问题。

比较 Oracle 固化执行计划方案 的差异

由于统计信息不断发生变化,SQL 语句的执行计划往往不稳定。

当数据量变化,或者索引增加,DBA 通常需要改变 SQL 语句才能改善应用系统的性能。

Oracle 固化执行计划方案虽然可以解决数据库环境发生变化时的性能问题,但当涉及到数据结构时,则变得无能为力。

而金仓数据库 KingbaseES Query Mapping 则可使用完全不同的 SQL 语句去替代原 SQL 语句,生成崭新的查询结果。既可优化查询语句,也能从不同的表和列获得结果。

用户头像

金仓技术

关注

数据库平替用金仓 2025-03-24 加入

还未添加个人简介

评论

发布
暂无评论
浅析金仓数据库KingbaseES的Query Mapping:无需改代码的 SQL 优化神器_KingBase_金仓技术_InfoQ写作社区