在SAP HANA 1.0 SPS 12中,我们希望通过ValidationAreaID和VersionValidTo对表进行分区。
到目前为止,这没问题。
但是由于与null的比较应该比时间戳快,所以我想按
进行分区} technical configuration {
partition by
range (ValidationAreaID) (
partition value = 1,
partition value = 2,
partition value = 3,
partition others
),
range (VersionValidTo) (
partition value = null,
partition others
)
;
代替
} technical configuration {
partition by
range (ValidationAreaID) (
partition value = 1,
partition value = 2,
partition value = 3,
partition others
),
range (VersionValidTo) (
partition value = '9999-12-31',
partition others
)
;
但是尝试按空值进行分区会导致错误消息:
Syntax error: unexpected token "null"
答案 0 :(得分:1)
提供一个封闭的答案:
分区定义子句不允许进行IS NULL
检查。
分区需要由一个唯一且可唯一标识的字符串或(无符号)数字或由封闭的值范围指定(请参见here)。
这回答了该部分是否可以为条件IS NULL
评估为true的记录创建分区:不是。
答案的第二部分解决了关于IS NULL
的检查比对特定值的检查要快的说法。
通常情况并非如此。尽管您可能发现可以比检查该列的整个 main 段更快地完成检查特定列中的NULL
条目的数据分布,但这与{{ 1}}条目。
根据任何列(以及表中所有列)中不同值的总体分布,SAP HANA将在该列的主要段中对值ID指针进行排序和压缩。
如果例如列中所有条目的大多数当前为NULL
,这很可能导致压缩,从而将所有NULL
条目放在最顶部,并使用RLE压缩那些条目。
在这种情况下,对NULL
的常规搜索将非常快。
同样,对于该列的其他非常突出的值,压缩可能会发生变化。
据我所知,IS NULL
的列存储中唯一的技术差异是它们具有硬编码的固定值ID,因此可以避免查找字典并避免所有列共享NULL
个条目的相同值ID。由于字典查找通常不是语句执行的瓶颈,因此可以公平地说“ NULL更快”的想法是不正确的。