【问题标题】:Exclude NULL value from UNIQUE INDEX in HANA从 HANA 中的 UNIQUE INDEX 中排除 NULL 值
【发布时间】:2019-06-25 07:48:35
【问题描述】:

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

在 SQL SERVER 中,我可以使用这个 sintax 创建一个索引:

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中获得相同的结果?

【问题讨论】:

    标签: hana


    【解决方案1】:

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

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

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

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

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

    鉴于对于列存储表(HANA 中的大多数表),每个字段都被有效索引,因此减少了对表子集优化索引的需求(可能为零,具体取决于数据架构和值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      相关资源
      最近更新 更多