返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

DROP TABLE
语法格式
DROP [TEMPORARY] TABLE [IF EXISTS] [database_name.]table_name
参数说明

TEMPORARY:该参数为可选参数,删除临时表时建议使用此关键字。

IF EXISTS:用户可以使用关键词IF EXISTS 防止表不存在时报告错误。当使
用IF EXISTS 时,对于不存在的表,用户将得到一个WARNING。

使用DROP TABLE 移除一个表时,将移除所有的数据和表定义,用户必须有
表的DROP 权限,所以,一定要小心地使用这个命令!该语句适用于8a 表和
Hive 表。
补充说明:
删除nocopies 表的语法和普通表一样,不必使用关键字NOCOPIES。

使用 onmode -I 选项开始和停止诊断信息的收集。
遇到错误时,可以指定 onmode -I iserrno 选项启动收集诊断信息。也可以指定会话 ID 或
收集仅指定的会话的信息。
使用 -I 选项(不需要附加其他参数)停止诊断信息的收集。

元素
用途
关键注意事项
iserrno 要收集诊断信息的错误的错误编号

sid
要收集诊断信息的会话的会话 ID



GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 366 -
诊断信息收集程序在 GBase 8s 管理员指南 中描述。

使用 SET EXPLAIN 语句来启用或禁用在当前的会话中查询的记录评估,包括查
询优化器的计划、对返回行的数目的估计,以及该查询的相对成本。
语法

元素
描述
限制
语法
expression
返回文件名称规范的表
达式
必须返回满足文件名
称限制的字符串
表达式

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1037
元素
描述
限制
语法
file_name
说明输出文件名称。如
果未包括文件的绝对路
径,则会在默认的说明
输出文件位置创建说明
输出文件
必须符合操作系统规
则。如果该文件已存
在,则将说明输出追
加在它后面。
引用字符串
file_name_var
存储文件名称的主变量 必须为字符数据类型 特定于语言
用法
将来自 SET EXPLAIN ON 语句的输出指向适合的文件,直到您发出 SET
EXPLAIN OFF 语句或直到程序结束为止。如果您未输入 SET EXPLAIN 语句,
则缺省的行为是 OFF,且数据库服务器不生成查询的评估。
在数据库服务器优化阶段期间,执行 SET EXPLAIN 语句,当您初始化查询时会
发生。对于与游标相关联的查询,如果准备该查询且没有主变量,则当您准备它
时发生优化。否则,当您打开游标时,发生优化。
SET EXPLAIN 语句提供参与执行查询的工作的多种评估。
选项 作用
ON 为每一随后的查询生成评估并将结果写到当前目录中的输出
文件。如果给文件已存在,则将新的输出追加到现有的文件
之后。
AVOID_EXECUTE 防止 SELECT、INSERT、MERGE、UPDATE 或 DELETE
语句执行。数据库服务器将查询计划打印到输出文件
OFF 终止 SET EXPLAIN 语句的活动,以便于不再生成随后的查
询的评估或写到输出文件
FILE TO 为每一随后的查询生成评估,并允许您指定说明输出文件的位
置。
下列示例为当前会话中随后的查询将查询计划写到说明输出文件中:
SET EXPLAIN ON;

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1038
下列示例将查询计划追加写到当前会话中的文件:
SET EXPLAIN OFF;
使用 AVOID_EXECUTE 选项
AVOID_EXECUTE 关键字防止 DML 语句执行。相反,数据库服务器将查询计
划打印到输出文件。
SET EXPLAIN ON AVOID_EXECUTE 语句为会话激活 Avoid Execute 选项,或
直到下一不带 AVOID_EXECUTE 的 SET EXPLAIN OFF(或 ON)为止。如果
您为包含远程表的查询激活 AVOID_EXECUTE,则该查询既不在本地也不在远
程站点执行。
下列示例在指定的文件中存储输出。
SET EXPLAIN ON AVOID_EXECUTE;
SET EXPLAIN FILE TO '/tmp/explain.out';
当设置 AVOID_EXECUTE 时,数据库服务器发出警告消息。如果您正在使用 DB-
Access,则它为任何选择、删除、更新或插入查询操作显示文本消息。
Warning! avoid_execute has been set
对于 ESQL,sqlwarn.sqlwarn7 字符设置为 'W'。
使用 SET EXPLAIN ON 或 SET EXPLAIN OFF 语句来关闭 AVOID_EXECUTE
选项。SET EXPLAIN ON 语句关闭 AVOID_EXECUTE 选项,但继续生成查询计
划并将结果写到输出文件。
如果您在 SPL 例程中发出 SET EXPLAIN ON AVOID_EXECUTE 语句,则该
SPL 例程和任何 DDL 语句仍然执行,但在该 SPL 例程内部的 DML 语句不执
行。数据库服务器将该 SPL 例程的查询计划打印到输出文件。要关闭此选项,您
必须在该 SPL 例程的外部执行 SET EXPLAIN ON 或 SET EXPLAIN OFF 语
句。如果您在执行 SPL 例程之前执行 SET EXPLAIN ON AVOID_EXECUTE 语
句,则在该 SPL 例程内部的 DML 语句不执行,且数据库服务器不将该 SPL 例
程的查询计划打印到输出文件。
当 AVOID_EXECUTE 生效时,仍然对查询中的恒定函数求值,因为数据库服务
器在优化之前计算这些函数。
例如,即使不执行下列 SELECT 语句,也对 func( ) 函数求值:

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1039
SELECT * FROM orders WHERE func(10) > 5;
要了解 AVOID_EXECUTE 选项的其他性能影响,请参阅 GBase 8s 性能指南 。
如果您在 GBase 8s ESQL/C 程序中打开游标之前执行 SET EXPLAIN ON
AVOID_EXECUTE 语句,则每一 FETCH 操作都返回找不到行的消息。然而,
如果您在 GBase 8s ESQL/C 程序打开游标之后执行 SET EXPLAIN ON
AVOID_EXECUTE,则此语句对游标不起作用,其继续返回行。
使用 FILE TO 选项
当您执行 SET EXPLAIN FILE TO 语句时,开启说明输出。SET EXPLAIN FILE
TO 语句可更改说明输出的缺省的文件名称,直到会话结束为止,或直到发出另
一 SET EXPLAIN 语句为止。
该 filename 可为任何路径与文件名称的任何组合。如果未指定路径,则将该未见
值域缺省的说明输出位置。当前的用户拥有该文件的权限。
您在 SET EXPLAIN 语句中指定的输出文件可为新文件或现有的文件。如果
FILE TO 子句指定现有的文件,则将新的输出追加到那个文件的后面。
在 UNIX™ 上的说明输出文件的缺省名称和位置
当您发出 SET EXPLAIN ON 语句时,将优化器为每一随后的查询选择的计划写
到说明输出文件。
当您发出 SET EXPLAIN ON 时,如果说明输出文件不存在,则数据库服务器创
建该文件。如果当您发出 SET EXPLAIN ON 语句时,说明输出文件已存在,则
将随后的输出追加到该文件后面。
说明输出文件的缺省名称
由 SET EXPLAIN 语句生成的说明输出文件与由 onmode -Y 生成的说明文件有
不同的名称。映射的用户的说明输出 filename 与 OS 用户的说明输出 filename
也不相同。下表展示缺省的名称:
表 1. 缺省的说明输出文件名称。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1040
用户与生成类型
文件名称
常规用户与 SET EXPLAIN
sqexplain.out
映射的用户与 SET EXPLAIN
username_sqexplain.out
常规用户与 onmode -Y
sqexplain.out.session_id
映射的用户与 onmode -Y
username_sqexplain.out.session_id
说明输出文件的缺省位置
如果客户端应用与数据库服务器在同一台计算机上,则输出文件存储在您的当前
名录中。如果您正在使用 Version 5.x 或更早的客户端应用且输出文件不出现在当
前的目录中,则请检查您对于该文件的 home 目录。当当前的数据库在另一台计
算机上时,该输出文件存储在远程主机上您的 home 目录中。
对于没有 home 目录的映射的用户,说明输出文件存储在
$GBASEDBTDIR/users/server_svrnum/uid_uid 中。
对于带有 home 目录的映射的用户,远程客户端的说明输出文件存储在该用户的
home 目录中,且本地客户的说明输出文件存储在用户的当前工作目录中。
在 Windows 上的输出文件的缺省名称和位置
在 Windows™ 上,SET EXPLAIN ON 将优化器为每一随后的查询选择的计划写
到 %GBASEDBTDIR%\sqexpln 中的文件。
对于由 SET EXPLAIN 语句生成的说明输出文件,缺省的文件名称为
user_name.out,在此,user_name 是用户登录名。
对于由 onmode -Y 生成的说明输出文件,缺省的文件名称为
sqexplain.out.session_id。
SET EXPLAIN 输出
查看 SET EXPLAIN 输出文件来分析关于执行了的查询的信息,包括查询的伪指
令集、对查询成本的估算、对返回行数的估计、服务器访问的表中的顺序、索引
键、连接方式和查询统计信息。
下表罗列可出现在输出文件中的术语及其意义。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1041
术语
意义
查询
显示执行了的查询,并指示将 SET OPTIMIZATION 设置为了
HIGH 还是 LOW。如果您 SET OPTIMIZATION 为 LOW,则输出显
示下列大写字符串作为第一行:QUERY:{LOW}
如果您 SET OPTIMIZATION 为 HIGH,则 SET EXPLAIN 的输出
显示下列大写字符串作为第一行:QUERY:
后跟的伪指

罗列查询的伪指令集
如果伪指令的语法不正确,则处理不带伪指令的查询。在那种
情况下,输出在 DIRECTIVES FOLLOWED 之外还展示
DIRECTIVES NOT FOLLOWED。
要获取更多关于在此术语之后指定的伪指令的信息,请参阅 优
化程序伪指令 或 SET OPTIMIZATION 语句。
如果 DELETE 或 UPDATE 语句在 WHERE 子句中指定不相关联的
子查询,则由该子查询返回的符合条件的行的集合具体化为临
时表,SET EXPLAIN 的输出显示在下列消息的括号之内:
(Temp Table For Subquery)
估计的成本
该查询的工作量的估计值
优化器使用估计值来比较一路径与另一路径的成本。估计值是
优化器赋予被选择的访问方式的一个数。此数不直接地译为时
间,且不用于比较不同的查询。然而,它可用于比较同一查询
产生的更改。当使用数据分发时,带有较高估计值的查询通常
比带有较小估计值的查询花费更长的运行时间。
在查询与子查询的情况下,返回两个估计的成本数字;查询数
字还包括子查询成本。展示子查询成本以便于您可看到仅与子
查询相关联的成本。
返回的行的
估计数
要返回的行的数目的估计值
此数值是基于系统目录表中的信息的。
编号的列表
访问表的次序,后跟所使用的访问方式(索引路径或顺序扫
描)
当查询涉及表继承时,罗列在超级表之下以访问它们的顺序为
顺序的所有表。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1042
术语
意义
索引名称
索引的名称
例如,idx1 是下列索引的名称:
Index Name: gbasedbt.idx1
索引名称中的 FOT 标识该索引为树型索引的森林:例如,下列
索引是树型索引的森林:
Index Name: gbasedbt.fot_idx (FOT)
索引键
用作过滤器或索引的列;指示用于索引路径或过滤器的列名
称。
符号 (Key Only) 指示所有期望的列都是索引键的一部分,因此
索引的仅键读取可被实际表的读取所取代。在有 NLSCASE
INSENSITIVE 属性的数据库中,所有索引扫描方式(仅键扫描
除外)都允许查询执行计划将所有区分大小写的值映射到
NCHAR 和 NVARCHAR 列的单个值。要获取更多关于 NLSCASE
INSENSITIVE 数据库的信息,请参阅 在 NLSCASE INSENSITIVE
数据库中重复的行。
“下部索引过滤器”在索引读取开始处展示键值;在索引读取停
止处展示键值的“上部索引过滤器”。索引键过滤器展示将用在
被检索的索引键值的过滤器。如果查询使用索引自连接路径,
则“索引自连接键”展示用作自连接键的引导索引键,且下限和
上限展示引导索引键列的边界。
连接方式
当查询涉及两表之间的连接时,优化器使用的(“嵌套的循
环”或“动态哈希”)连接方式展示在那个查询的输出的底
部。
当查询涉及两表的动态连接时,如果输出包含词 Build Outer,
则在罗列的第一个表(成为构建表)上构建哈希表。如果未出
现词 Build Outer,则在罗列的第二个表上构建哈希表。
查询统计信

当 EXPLAIN_STAT 配置参数设置为 1 时,这部分展示返回的行
数、在查询计划中估计的行数、需要的时间、对 iterator 函
数的调用,以及对表对象的扫描和连接操作的估计成本。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1043
术语
意义
时间
当输出显示查询执行计划或那个计划的组件消耗的时间时,该
值的格式为 minutes:seconds.fraction 来显示分、表和秒的
小数部分。
如果查询使用核对顺序而不是 DB_LOCALE 设置的缺省顺序,则输出文件包括
DB_LOCALE 设置以及作为在该查询中(通过 SET COLLATION 指定的)核对
基础的其他语言环境的名称。类似地,如果由于它的核对而不使用索引,则输出
文件作此指示。
完整连接级别设置和输出示例
SET EXPLAIN 语句支持完整连接级别设置。
SET EXPLAIN 语句支持完整连接级别设置。这意味着在连接时将本地会话环境中
的值传播到所有下列类型的新的或恢复的事务:

本地数据库之内的事务

跨同一服务器实例的数据库的分布式事务

跨两个或多个数据库服务器实例的数据库的分布式事务

带有在本地数据库中注册的符合 XA 的数据源的全局事务
如果您更改事务之内的 SET EXPLAIN 设置,则将新的值传播回到本地环境以及
所有随后的新的或恢复的事务。
SET EXPLAIN 输出的示例
下列 SQL 语句导致数据库服务器将 UPDATE 语句(及其子查询)的查询计划
写到缺省的输出文件:
DATABASE stores_demo;
SET EXPLAIN ON;
UPDATE orders SET ship_charge = ship_charge + 2.00
WHERE customer_num IN
(SELECT orders.customer_num FROM orders
WHERE orders.ship_weight < 50);
CLOSE DATABASE;
在结果的输出中显示下列信息:

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1044
QUERY:
------
update orders set ship_charge = ship_charge + 2.00
where customer_num in
(select orders.customer_num from orders where
orders.ship_weight < 50)

Estimated Cost: 4
Estimated # of Rows Returned: 8

1) gbasedbt.orders: INDEX PATH

(1) Index Keys: customer_num (Serial, fragments: ALL)
Lower Index Filter: gbasedbt.orders.customer_num = ANY

Subquery:
---------
Estimated Cost: 2
Estimated # of Rows Returned: 8
(Temp Table For Subquery)

1) gbasedbt.orders: SEQUENTIAL SCAN

Filters: gbasedbt.orders.ship_weight < 50.00
下一示例基于下列 SQL 语句,其中包括 DELETE 操作:
DATABASE stores_demo;
SET EXPLAIN ON;
DELETE FROM catalog WHERE stock_num IN
(SELECT stock.stock_num FROM stock, catalog WHERE
stock.stock_num = catalog.stock_num
AND stock.unit_price < 50);
CLOSE DATABASE;
以下是结果输出:
QUERY:
------
DELETE FROM catalog WHERE stock_num IN

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1045
(SELECTstock.stock_num from stock, catalog
WHERE stock.stock_num = catalog.stock_num
AND stock.unit_price < 50);

Estimated Cost: 19
Estimated # of Rows Returned: 37

1) ajay.catalog: INDEX PATH

(1) Index Keys: stock_num manu_code (Serial, fragments: ALL)
Lower Index Filter: ajay.catalog.stock_num = ANY

Subquery:
---------
Estimated Cost: 12
Estimated # of Rows Returned: 44
(Temp Table For Subquery)

1) ajay.stock: SEQUENTIAL SCAN

Filters: ajay.stock.unit_price < $50.00

2) ajay.catalog: INDEX PATH

(1) Index Keys: stock_num manu_code
(Key-Only) (Serial, fragments: ALL)
Lower Index Filter:
ajay.stock.stock_num = ajay.catalog.stock_num

NESTED LOOP JOIN
在 SET EXPLAIN 输出中的外部表操作
SET EXPLAIN 的 Query Statistics 部分提供关于从外部表加载数据或将数据卸载
到外部表的操作的信息。
SET EXPLAIN 输出文件的 Query Statistics 部分中的下列代码提供关于外部表的
信息:

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1046

xlcnv 标识从外部表加载数据并将数据插入基础表的操作。此处,x =
外部表,l = 加载,且 cnv = 转换器

xucnv 标识从基础表读数据并写到外部表正指向的文件的操作。此处,x
= 外部表,u = 卸载,且 cnv = 转换器
示例
下列示例展示一查询,其中的操作是从外部表加载数据并将数据插入到基础表
内:
QUERY: (OPTIMIZATION TIMESTAMP: 11-11-2009 12:55:20)
------
insert into items select * from ext_items

Estimated Cost: 5
Estimated # of Rows Returned: 68

1) gbasedbt.ext_items: SEQUENTIAL SCAN

Query statistics:
-----------------
Table map :
----------------------------
Internal name Table name
----------------------------
t1 items

type it_count time
----------------------------
xlread 1 00:00.00

type it_count time
----------------------------
xlcnv 67 00:00.00

type table rows_ins time
-----------------------------------
insert t1 67 00:00.00

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1047
下列示例展示一查询,其中的操作是从基础表读数据并写到外部表指向的文件:
QUERY: (OPTIMIZATION TIMESTAMP: 11-11-2009 12:47:55)
------
select * from orders into external ord_ext
using (datafiles ('disk:/tmp/ord'))


Estimated Cost: 2
Estimated # of Rows Returned: 23

1) gbasedbt.orders: SEQUENTIAL SCAN


Query statistics:
-----------------

Table map :
----------------------------
Internal name Table name
----------------------------
t1 orders

type table rows_prod est_rows rows_scan time est_cost
-------------------------------------------------------------------
scan t1 23 23 23 00:00.00 3

type it_count time
----------------------------
xucnv 23 00:00.00

type it_count time
----------------------------
xuwrite 23 00:00.00