StarRocks案例6: StarRocks同关系型数据库的绑定变量功能

一. 问题描述

公司目前的业务是,实时和离线的数据,都导入StarRocks,然后后端根据前端传入的条件来拼接SQL语句。
使用过关系型数据库的朋友应该知道,这样会导致很多类似的SQL需要重复解析,俗称硬解析,给CPU带来较大的压力。

二. 解决方案

自定义变量:
找了下官网,没有发现绑定变量相关的文档,只有一个类似MySQL在查询中使用变量的方法,感觉目前 还不能解决当前的问题。

SET @var = (select sum(c1) from tbl);
SELECT @var, v1 from test;

SQL指纹:
后来发现,StarRock支持SQL指纹
https://docs.starrocks.io/zh-cn/latest/administration/Query_planning#%E6%9F%A5%E7%9C%8B-sql-%E6%8C%87%E7%BA%B9

StarRocks 支持规范化慢查询中 SQL 语句,归类并计算各个类型 SQL 语句的 MD5 哈希值。

以下两个 SQL 语句,规范化后属于同一类SQL。

SELECT * FROM orders WHERE customer_id=10 AND quantity>20

SELECT * FROM orders WHERE customer_id = 20 AND quantity > 100

以下为规范化后 SQL 类型。

SELECT * FROM orders WHERE customer_id=? AND quantity>?

存在问题:
因为条件传参不同,查询的数据量差别很大,进而导致执行计划的差异。
而使用了SQL指纹,则两者的执行计划相同。虽然解决了硬解析的问题,但是带来了另外一个问题。
期待同Oracle的自适应游标共享的功能。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容