这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
列编码
更改列编码也有可能会提高查询速度。编码可减少数据在磁盘上的大小,因此会减少查询所需的 I/O,进而提高查询执行速度。确保查询中包括的所有列和投影都使用了正确的数据编码。为此,请执行以下步骤:
-
运行 Database Designer 来创建增量设计。Database Designer 会实施最佳编码和投影设计。
-
创建增量设计后,使用 ANALYZE_STATISTICS 函数更新统计数据。
-
使用您向设计提交的一个或多个查询运行 EXPLAIN,确保它正在使用新投影。
或者,运行 DESIGNER_DESIGN_PROJECTION_ENCODINGS 重新评估当前编码并在必要时对其进行更新。
1 - 改善列压缩
如果发现性能较慢,或者 FLOAT 数据占用了大量存储空间,请评估数据和业务需要,确认数据能否放入精度在 18 位及以下的 NUMERIC 列中。将 FLOAT 列转换为 NUMERIC 列可以提升数据压缩率,降低数据库的磁盘大小,并提升该列的查询性能。
定义 NUMERIC 数据类型时,您要指定精度和小数位数;NUMERIC 数据是数据的精确表示。FLOAT 数据类型代表了可变精度和近似值;它们在数据库中占用的空间更多。
在以下情况下,将 FLOAT 列转换为 NUMERIC 列最有效:
-
NUMERIC 精度为 18 位及以下。NUMERIC 数据的性能针对最常见的 18 位精度进行了优化。仅当需要 18 位及以下精度时,Vertica 才会建议将 FLOAT 列转换为 NUMERIC 列。
-
FLOAT 精度会受到限制,并且值将全部限定在 NUMERIC 列的指定精度范围内。一个示例是货币值,例如产品价格或财务交易金额。例如,定义为 NUMERIC(11,2) 的列可以包括从 0 到几百万美元的价格,可以存储分币,而且压缩效率也比 FLOAT 列更高。
如果您尝试将值加载到超过指定精度的 NUMERIC 列,Vertica 会返回错误,并且不会加载数据。如果您分配的值的小数位数大于指定小数位数,那么该值会进行四舍五入以匹配指定的小数位数,然后再存储到该列中。
另请参阅
数字数据类型
2 - 使用运行长度编码
当您运行 Database Designer 时,您可以选择对加载进行优化,以最大限度地减少数据库占用空间。在这种情况下,Database Designer 会对列应用编码,以最大限度地提供查询的性能。编码选项包括运行长度编码 (RLE),此编码将列中唯一值的序列(运行长度)替换为一组值对,其中每个值对表示给定值连续出现的次数:(出现次数, 值)。
RLE 一般适用于低基数列,并且其中的唯一值通常是连续的,因为在此列中对表数据进行了排序。例如,客户个人资料表通常包含性别列,而此列仅包含 F 值和 M 值。对性别进行排序可确保 F 值或 M 值的运行长度可以表示为一组两个值对:(出现次数, F)和(出现次数, M)。因此,假设 F 出现 8,147 次,M 出现 7,956 次,而投影主要根据性别排序,Vertica 可以应用 RLE,将这些值存储为一组两个值对:(8147, F) 和 (7956, M)。这样可以减少投影占用空间,提高查询性能。