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后,可以观测索引扫描。

SET enable_seqscan TO OFF;
SET enable_bitmapscan TO OFF;
explain SELECT count(*) FROM test WHERE c1 IN ('1','2','3') ;

返回结果为: > > sql > 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) >

6、清理环境。

DROP TABLE test;