联接可变长度字符串数据

当您在 VARCHAR 列上联接表时,Vertica 会计算缓冲联接列数据所需的存储空间。它通过采用以下两种方式之一设置列数据格式来完成此操作:

  • 使用联接列元数据将列数据的大小调整为固定长度,并相应地缓冲。例如,给定一个定义为 VARCHAR(1000) 的列,Vertica 始终缓冲 1000 个字符。

  • 使用联接列数据的实际长度,因此每个联接的缓冲区大小不同。例如,给定字符串 Xi、John 和 Amrita 的联接,Vertica 仅缓冲每个联接所需的存储空间 — 在本例中,分别为 2、4 和 6 个字节。

第二种方法可以提高联接查询性能。它还可以减少内存消耗,这有助于防止联接溢出并最大限度地减少从资源管理器借用内存的频率。通常,在联接列的定义大小显著超过其数据的平均长度的情况下,这些好处尤其显著。

设置和验证可变长度格式

您可以通过配置参数 JoinDefaultTupleFormat 控制 Vertica 如何在会话或数据库级别实施联接,或者通过 JFMT 提示控制针对单个查询实施联接。Vertica 支持除 mergeevent series 联接之外的所有联接的可变长度格式。

使用 EXPLAIN VERBOSE 通过检查以下标志来验证给定查询是否使用可变字符格式:

  • JF_EE_VARIABLE_FORMAT

  • JF_EE_FIXED_FORMAT