VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

处理隐式转换导致的性能下降

应用场景

当Vastbase G100在执行带where in条件的select语句时,如果column类型为varchar,而value list中给出的都是数字的列表时,执行计划会进行隐式转换,则将会导致性能大幅下降。

为此,Vastbase优化执行计划,即在处理where in条件表达式时,如果左操作表达式是字符串类型,且in列表中的每一个表达式的数据类型都能隐式转换为字符串类型,则将最终执行计划优化为检查左操作表达式是否为in列表中表达式组成的字符串数组的一个元素。

注意事项

优化查询的前提是where in 列表中的数据类型能够隐式转换为字符串类型,否则该优化计划无法执行。

示例

1、创建测试表并插入数据。

create table test(c1 varchar(2), c2 varchar, c3 text) ;
insert into test select v,v,v from generate_series(1,12) as v;

2、查看表内容。

select c2,c3 from test where test.c3 in (3,4,7) order by 1; 

结果显示为:

 c2 | c3
----+----
 3  | 3
 4  | 4
 7  | 7
(3 rows)

3、查看执行计划。

explain (costs off) select c2,c3 from test where test.c3 in (3,4,7) order by 1;

结果显示为:

                   QUERY PLAN
------------------------------------------------
 Sort
   Sort Key: c2
   ->  Seq Scan on test
         Filter: (c3 = ANY ('{3,4,7}'::text[]))
(4 rows)