返回首页

gbase数据、南大通用产品文档:GBase8a隐式表物化

更新日期:2024年09月11日

隐式表代表子查询的表,如SELECT COUNT(*) FROM (SELECT * FROM t1) tt;,
则tt 即为隐式表。该优化主要是对隐式表中的外部查询没有用到的投影部分不进
行物化,简单说就是减少无用的物化列从而来提高sql 执行速度。
1.
优化特性:
只对隐式表中未用到的外部投影列不进行物化。
例如下面示例中的b 将不进行物化,示例:
SELECT tt.a FROM (SELECT a,b FROM t1) tt;
优化限制:

内部子查询中存在DISTINCT

内部子查询中存在UNION

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1321

内部子查询中存在RANK 类OLAP 函数(包括RANK、DENSE_RANK、
ROW_NUMBER、SUM() OVER()、AVG() OVER()),即使外部没有用到这些
olap 函数,
内部也不会进行优化,
但是不会影响其他非olap 函数字段的优化。
示例:
SELECT a FROM (SELECT RANK()OVER(ORDER BY j) AS rank ,j AS a,k
AS b,i AS c FROM t1) tt;
SELECT a FROM (SELECT RANK()OVER(ORDER BY j) AS rank ,j AS a
FROM t1) tt;

使用 DBANSIWARN 环境变量,可以指示您希望执行 ANSI 标准 SQL 语法的 GBase 8s
扩展检查。
与大多数环境变量不同,您不需要为 DBANSIWARN 设置值。您可以将其设置为任
何值,也可以不设置任何值。

在设置了 DBANSIWARN 的情况下运行 DB-Access,与在从命令行调用 DB-Access
(或可识别 -ansi 标志的任何 GBase 8s 产品)时加上 -ansi 标志具有同等功效。如果在
运行 DB-Access 之前设置了 DBANSIWARN,那么任何语法扩展警告都将显示在屏幕上
的 SQL 菜单内。
在运行时,如果所执行的语句被识别为包含 SQL 语法 ANSI/ISO 标准的任何 GBase
8s 扩展,那么 DBANSIWARN 环境变量会导致 SQL 通信区 (SQLCA) 中 sqlwarn 数
组的第六个字符设置为 W。
有关 SQLCA 的详细信息,请参阅 GBase 8s ESQL/C 程序员手册。
在设置 DBANSIWARN 之后,GBase 8s 扩展检查会自动进行,直到您注销或取消设置
DBANSIWARN。要关闭 GBase 8s 扩展检查,可通过以下命令禁用 DBANSIWARN:
unsetenv DBANSIWARN

当数据库中的 SQL 数据操作语句生成逻辑日志记录时,人们就认为数据库或表具有或使
用事务日志记录。
数据库日志记录状态指示数据库是否使用事务日志记录。日志缓冲方式指示数据库使用已
缓冲还是未缓冲日志记录、或是符合 ANSI 标准的日志记录。有关更多信息,请参阅数
据库日志记录状态和管理数据库日志记录方式。
在创建数据库时,指定数据库是否使用事务日志记录,如果使用,将使用哪种日志缓冲机
制。在创建数据库之后,您可以(例如)关闭数据库日志记录或切换到已缓冲日志记录。
即使您关闭了所有数据库的事务日志记录,数据库服务器也始终会记录一些事件。有关更
多信息,请参阅 始终记录的活动和X/Open DTP 环境中的数据库日志记录。
您可以使用数据库中的日志记录表或非日志记录表。创建表的用户将指定表类型。即使您
使用非日志记录表,数据库服务器也始终会记录一些事件。有关更多信息,请参阅 GBase
8s 的表类型。