从HANA

时间:2019-06-25 07:48:35

标签: hana

我需要在HANA中使用可为空的列创建唯一索引。我需要从索引中排除NULL值。

在SQL SERVER中,我可以使用以下语法创建索引:

CREATE UNIQUE NONCLUSTERED INDEX [MyTableIX_] ON [dbo].[MyTable]
(
    [MyField1] ASC,
    [MyField2] ASC,
    [MyField3] ASC
)
WHERE ([MyField1] IS NOT NULL AND [MyField2] IS NOT NULL AND [MyField3] IS NOT NULL)

如何在HANA中获得相同的结果?

1 个答案:

答案 0 :(得分:0)

AFAIK这是不可能的,因为UNIQUE索引要求所有 all 条目在创建索引时都是唯一的,并且会阻止添加会在索引中创建重复整数的记录。 (documentation对此进行了解释)

大多数数据库系统都以这种方式工作-独特意味着独特。

但是,如果您的表是列存储(大多数都在HANA中),那么您真的需要创建该索引吗?列存储优化了表以进行数据检索(这就是为什么在HANA中,读取通常比写入快 的原因),因此对于检索而言,使用索引可能没有什么显着差异。

如果要强制执行唯一性,则可以在表上实现触发器,如果​​发现任何冲突的记录,它将中止插入或更新。

MS SQL Server的“过滤索引”语法旨在针对表中特定记录子集的优化检索,以便在应用过滤器时可以使用索引,而不必覆盖表的所有行-导致索引更短,查询(希望)更快。

考虑到对于列存储表(HANA中的大多数表),每个字段都可以有效地建立索引,从而减少了对表子集的优化索引的需求(可能为零,具体取决于数据架构和值)。