MDX-IIF函数和CASE声明的执行计划

首先,了解一下FORMULAR ENGINE (FE) 的基本概念:

1,SUBSPACE

MDX EXPRESSION 总是返回 CUBE SPACE 的一个 SUBSPACE

2,RECTANGULAR SUBSPACE VS. ARBITRARY-SHAPED SUBSPACE

FE 处理 RECTANGULAR SUBSPACE 高效。

{FOOD,DRINK}*{2010,2011} 是 RECTANGULAR SHAPE;

{(FOOD,2010)}*{(DRINK,2011)} 是 ARBITRARY SHAPED.

3,BLOCK MODE VS. CELL-BY-CELL MODE

显然,BLOCK MODE 快很多。

4,SPARSE-EXPRESSION VS. DENSE EXPRESSION

SPARSE-EXPRESSION 是一个单值表达式,如果不是, 就是 DENSE-EXPRESSION.

5, 变化属性

它是MDX表达式依靠的子空间大于一个成员。FE 建立逻辑计划树后,产生变化属性。

6,逻辑计划

MDX 表达式执行多个阶段,每个阶段有一个逻辑计划。有时,一个大的逻辑计划树,FE需要建立子计划树。

7, DEFAULT VALUE

一个单值表达式是默认值,产生于FE建立逻辑计划后。

IIF函数执行计划

开始,IIF 函数会重写



IIF(a AND b, x, y) => IIF(a, IIF(b, x, y), y)
IIF(a OR b, x, y) => IIF(a, x, IIF(b, x, y))

然后,FE建立逻辑计划,必要的话,建立子树。

接着,建立 THEN 和 ELSE 分支计划,这里有两个模式: EAGER AND STRICT.

如果分支计划是原子空间,EAGER MODE;如果建立新子空间,STRICT MODE.

显然,STRICT MODE 好,子空间小。

这里, 可以增加执行暗示:

IIF(p, x HINT EAGER, y HINT STRICT)

必须指出的是,实际执行计划非常复杂,下面的一些做法或许有益:

1,使用 STRICT HINT,如果过量磁盘读数据

2,FE 试图 STRICT MODE ,失败后, 返回 EAGER MODE,这些 TRIAL-AND-ERRORS浪费时间,增加暗示 EAGER,减少不必要的尝试。

3,NESTED IIF PREDICATE顺序,这点非常重要。AND, OR 总是重写,顺序关键。

4,使用 LAZY HINT。

CASE 声明

它被重写:

CASE
WHEN p1 THEN e1
WHEN p2 THEN e2
...
WHEN pN THEN eN
ELSE eL
END

=>

IIF (p1, e1, IIF(p2, e2, ... IIF(pN, eN, eL)...))

暗示如下:

CASE HINT <EAGER|STRICT>
WHEN ... THEN ...
...
ELSE ...
END

因此,它的执行计划和IIF一样,上述适用于它,例外的是,简单CASE STATEMENT 不能 使用 EAGER AND STRICT,其他和以上的 SEARCH CASE 相同,不赘述。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值