0

这是关于sybase的查询计划以及如何根据查询计划形成树

1)这个查询计划如何形成正确的树?从 emit.Insert 开始是 Emit 的子代, Restrict 是 Insert 的子代,依此类推。与解释不符。

2)我可以知道实际处理是如何进行的,以及中间结果是如何飞行以达到最终结果的吗?一个节点可以拥有的最大子节点数是多少?

对不起这么长的例子。

文本删除运算符

另一种 DML 运算符可以有多个子运算符的查询计划是 alter table drop textcol 命令,其中 textcol 是数据类型为 text、image 或 unitext 的列的名称。以下查询和查询计划是使用文本删除运算符的示例:

1> use tempdb
1> create table t1 (c1 int, c2 text, c3 text)
1> set showplan on
1> alter table t1 drop c2

 QUERY PLAN FOR STATEMENT 1 (at line 1).
 Optimized using the Abstract Plan in the PLAN clause.
 5 operator(s) under root
 The type of query is ALTER TABLE.
 ROOT:EMIT Operator

   |INSERT Operator
   | The update mode is direct.
   |
   | |RESTRICT Operator
   | |
   | | |SCAN Operator
   | | | FROM TABLE
   | | | t1
   | | | Table Scan.
   | | | Forward Scan.
   | | | Positioning at start of table.
   | | | Using I/O Size 2 Kbytes for data pages.
   | | | With LRU Buffer Replacement Strategy for data pages.
   | |TEXT DELETE Operator
   | | The update mode is direct.
   | |
   | | |SCAN Operator
   | | | FROM TABLE
   | | | t1
   | | | Table Scan.
   | | | Forward Scan.
   | | | Positioning at start of table.
   | | | Using I/O Size 2 Kbytes for data pages.
   | | | With LRU Buffer Replacement Strategy for data pages.
   | TO TABLE
   | #syb__altab
   | Using I/O Size 2 Kbytes for data pages.


   The below is the explantion

说明:
使用 alter table 命令删除 t1 中的两个文本列之一。
showplan 输出看起来像一个 select into 查询计划,因为 alter table 在内部生成了一个 select into 查询计划。
插入运算符调用其左子运算符,即 t1 的扫描,以读取 t1 的行,并构建新行,其中仅将 c1 和 c3 列插入#syb_altab。
当所有新行都插入到#syb_altab 中时,插入运算符调用其右子元素
文本删除运算符,以删除已从t1 中删除的c2 列的文本页面链。
后处理将 t1 的原始页面替换为 #syb_altab 的页面以完成 alter table 命令。

4

0 回答 0