返回首页

gbase数据、南大通用产品文档:GBase8s记录

更新日期:2024年09月11日

CREATE OR REPLACE PROCEDURE P_5_28 AS
TYPE DeptRecTyp IS RECORD (
dept_id NUMBER(4),
dept_name VARCHAR2(30),
mgr_id NUMBER(6),
loc_id NUMBER(4)
); --类型DeptRecTyp的定义
dept_rec DeptRecTyp; --声明DeptRecTyp的变量
BEGIN
NULL;
END;

参数说明:cm_agent 上报实例状态的时间间隔。
取值范围:整型,单位为秒。修改后需要重启cm_agent 才能生效。参数修改请参考表
GUC 参数设置方式进行设置。
默认值:1

虚拟索引
虚拟索引功能支持用户在数据库中直接进行操作,
本功能将模拟真实索引的建立,
避免
真实索引创建所需的时间和空间开销,
用户基于虚拟索引,
可通过优化器评估该索引对指定
查询语句的代价影响。
本功能涉及的系统函数接口如下表所示:
表11- 10 虚拟索引功能的接口
函数名
参数
功能
hypopg_create_index
创建索引语句的字符串
创建虚拟索引。
hypopg_display_index

显示所有创建的虚拟索引信息。
hypopg_drop_index
索引的oid
删除指定的虚拟索引。
hypopg_reset_index

清除所有虚拟索引。
hypopg_estimate_size
索引的oid
估计指定索引创建所需的空间大小。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
386
本功能涉及的GUC 参数如下:
表11- 11 虚拟索引功能的GUC 参数
参数名
功能
默认值
enable_hypo_index
是否开启虚拟索引功能
off
使用步骤
(1)
使用函数hypopg_create_index 创建虚拟索引。例如:
gsql=> select * from hypopg_create_index('create index on bmsql_customer(c_w_id)');
indexrelid |
indexname
------------+-------------------------------------
329726 | <329726>btree_bmsql_customer_c_w_id
(1 row)
(2)
开启GUC 参数enable_hypo_index,该参数控制数据库的优化器进行EXPLAIN 时是否
考虑创建的虚拟索引。通过对特定的查询语句执行explain,用户可根据优化器给出的
执行计划评估该索引是否能够提升该查询语句的执行效率。例如:
gsql=> set enable_hypo_index = on;
SET
开启GUC 参数前,执行EXPLAIN + 查询语句:
gsql=> explain SELECT c_discount from bmsql_customer where c_w_id = 10;
QUERY PLAN
----------------------------------------------------------------------
Seq Scan on bmsql_customer
(cost=0.00..52963.06 rows=31224 width=4)
Filter: (c_w_id = 10)
(2 rows)
开启GUC 参数后,执行EXPLAIN + 查询语句:
gsql=> explain SELECT c_discount from bmsql_customer where c_w_id = 10;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------
[Bypass]
Index Scan using <329726>btree_bmsql_customer_c_w_id on bmsql_customer
(cost=0.00..39678.69 rows=31224 width=4)
Index Cond: (c_w_id = 10)
(3 rows)
通过对比两个执行计划可以观察到,
该索引预计会降低指定查询语句的执行代价,
用户

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
387
可考虑创建对应的真实索引。
(3)
(可选)使用函数hypopg_display_index 展示所有创建过的虚拟索引。例如:
gsql=> select * from hypopg_display_index();
indexname
| indexrelid |
table
|
column
--------------------------------------------+------------+----------------+------------------
<329726>btree_bmsql_customer_c_w_id
|
329726 | bmsql_customer | (c_w_id)
<329729>btree_bmsql_customer_c_d_id_c_w_id |
329729 | bmsql_customer | (c_d_id,
c_w_id)
(2 rows)
(4)
(可选)使用函数hypopg_estimate_size 估计虚拟索引创建所需的空间大小(单位:字
节)。例如:
gsql=> select * from hypopg_estimate_size(329730);
hypopg_estimate_size
----------------------
15687680
(1 row)
(5)
删除虚拟索引。
使用函数hypopg_drop_index 删除指定oid 的虚拟索引。例如:
gsql=> select * from hypopg_drop_index(329726);
hypopg_drop_index
-------------------
t
(1 row)
使用函数hypopg_reset_index 一次性清除所有创建的虚拟索引。例如:
gsql=> select * from hypopg_reset_index();
hypopg_reset_index
--------------------
(1 row)

执行EXPLAIN ANALYZE 不会涉及虚拟索引功能。

创建的虚拟索引是数据库实例级别的,各个会话(session)之间可共享设置,关闭
会话后虚拟索引仍可存在,但是重启数据库后将被清空。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
388

本功能暂不支持视图、物化视图、列存表。