StarRocks案例6: StarRocks同关系型数据库的绑

2023-06-18  本文已影响0人  只是甲

一. 问题描述

公司目前的业务是,实时和离线的数据,都导入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的自适应游标共享的功能。

上一篇 下一篇

猜你喜欢

热点阅读