这是关于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 命令。