VastbaseG100

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

Menu

内置跨类型操作符

功能描述

当基于表中字段类型bpchar创建btree索引时,由于存在跨bpchar/text类型操作符,bpchar op text形式的过滤条件可以用于索引匹配。

注意事项

  • 跨类型操作符只对bpchar op text或text op bpchar形式的过滤条件支持匹配索引。

  • 由于路径代价原因,explain时不一定能在执行计划中看到索引扫描。如果一定要观测索引扫描,则需要执行如下设置:

    set enable_seqscan to off;
    set enable_bitmapscan to off;
    

示例

1、创建测试表且主表中包含字段类型为bpchar的列,并插入数据。

create table test(c1 int,c2 bpchar(60));
insert into test values(generate_series(1,10),current_date);

2、基于表中字段类型bpchar创建btree索引。

create index idx_c2 on test using btree(c2);

3、收集与数据库中表内容相关的统计信息。

analyze test;

4、查询表中信息。

select count(*) from test where c1 in ('1','2','3') ; 

结果显示为:

 count
 --------
   3
(1 row)

5、查询执行计划。

explain select count(*) from test where c1 in ('1','2','3') ;

结果显示为:

                     QUERY PLAN
----------------------------------------------------------
 Aggregate  (cost=1.15..1.16 rows=1 width=8)
   ->  Seq Scan on test  (cost=0.00..1.14 rows=3 width=0)
         Filter: (c1 = ANY ('{1,2,3}'::integer[]))
(3 rows)

当设置enable_seqscan、enable_bitmapscan参数值为off后,可以观测索引扫描,结果显示为:

                                   QUERY PLAN
--------------------------------------------------------------------------------
 Aggregate  (cost=1000000000113.76..1000000000113.77 rows=1 width=8)
   ->  Seq Scan on test  (cost=10000000000.00..1000000000113.75 rows=3 width=0)
         Filter: (c1 = ANY ('{1,2,3}'::integer[]))
(3 rows)