Abap 字典表列中的字符串类型

Abap 字典表列中的字符串类型,abap,hana,sap-data-dictionary,Abap,Hana,Sap Data Dictionary,我有一个SE11表,其中有一列类型为STRING,我想知道它是如何存储在底层数据库系统(本例中为SAP Hana)上的 我了解到,实际上只有对LOB的引用保存在一个列中,该列键入为STRING,而字符串本身保存在表外。这是真的吗?在Hana上也一样吗?我试图RTFM,但我找不到那个信息 如果可能,通常建议使用具有特定长度的CHAR 免责声明。尽管我为SAP SE工作,但我与SAP HANA的团队或代码没有关系。以下信息是通过SAP HANA 2 SP02(2.00.024.00.15198060

我有一个SE11表,其中有一列类型为
STRING
,我想知道它是如何存储在底层数据库系统(本例中为SAP Hana)上的

我了解到,实际上只有对LOB的引用保存在一个列中,该列键入为
STRING
,而字符串本身保存在表外。这是真的吗?在Hana上也一样吗?我试图RTFM,但我找不到那个信息

如果可能,通常建议使用具有特定长度的
CHAR

免责声明。尽管我为SAP SE工作,但我与SAP HANA的团队或代码没有关系。以下信息是通过SAP HANA 2 SP02(2.00.024.00.1519806017)中的反复试验收集的。它既不可靠,也不具有法律约束力,将来可能会在不另行通知的情况下进行更改

好了,现在让我们来看一些事情:

  • SAP HANA有一个列存储(=新奇的事物)和一个行存储(=从其他关系数据库中得知)。这两个是非常不同的。因此,在优化结构时,您应该了解要处理的存储

  • ABAP DDIC将透明表中的
    STRING
    列转换为
    NCLOB
    列,并将
    CHAR
    转换为
    NVARCHAR

  • ABAP DDIC对于字符串非常特殊:它们不能用作键,因为它们超过了255个字符的最大键长度。它们还防止应用服务器缓冲表,从而增加重复查询的响应时间。这本身通常就是避免使用
    STRING
    而改用
    CHAR
    的原因。总之,可以说在透明表中添加多个
    STRING
    列是没有意义的

  • SAP HANA确实将LOB存储在表的外部,而表只保存一个引用。内容的处理方式与文件类似。他们的
    容器ID
    可以从中收集。相关信息为您提供了有关已占用空间的更多详细信息

  • 最近的一项研究揭示了另一个有趣的事实:“因为SAP HANA不会压缩LOB列,无论它是驻留在磁盘中还是内存中[…]”。这意味着该列将消耗与您放入的内容相同的磁盘空间。这与SAP HANA的其他列store content(存储内容)有很大不同,后者需要大量压缩以优化存储和访问。由此得出的结论还值得注意:“[…]在从数据库写入/读取时,在应用层应用任何可能的压缩算法逻辑(如gzip)是至关重要的”

  • 一般来说——我所知道的所有数据库管理系统都是如此——最好选择可变字符类型,因为它们可以让系统自由地优化实际保留的空间。因此,SAP HANA的合理默认值应该是
    NVARCHAR
    (=Unicode-capable)”


您是将“一般”限制在HANA中,还是也将其计算在其他DBMS中?一般来说,我指的是所有与SAP兼容的DBMS。也许有点太笼统了,但这将是一个很好的答案:-)不确定,因为答案可能与HANA非常不同。