Vertica表中的列数是否会影响查询性能?

时间:2017-12-04 21:35:25

标签: vertica

我们正在使用包含500列和100 000行的Vertica 8.1表。

以下查询执行大约需要1.5秒,即使直接在其中一个Vertica群集节点上使用vsql客户端(以消除任何网络延迟问题):

SELECT COUNT(*) FROM MY_TABLE WHERE COL_132 IS NOT NULL and COL_26 = 'anotherValue'

但是在检查query_requests表时,request_duration_ms只有98毫秒,而resource_acquisitions表并未指示资源调查中的任何延迟。我无法理解剩下的时间花在哪里。

如果我然后只将查询使用的列导出到新表,并在这个新的较小的表上运行查询,我得到一个极快的响应,即使query_requests表仍然告诉我request_duration_ms是98毫秒。

因此,即使未引用大多数这些列,表中的列数也会影响查询的执行时间。我错了吗 ?如果是这样,为什么会这样呢?

先谢谢

2 个答案:

答案 0 :(得分:0)

听起来您的查询正在针对包含所有表的(默认)超级投影运行。尽管Vertica是一个柱状数据库(具有相关的压缩和编码),但您的查询可能仍然接触到的数据超出了它的需要。

您可以创建projections来优化您的查询。投影包含列的子集;如果有一个包含您的查询所需的所有列,那么查询将使用该列而不是超级投影。 (它a little more complicated比这更重要,因为物理位置也是一个因素,但这是一个基本想法。)您可以使用Database Designer根据您的创建一些初步预测架构和示例查询,并随着时间的推移迭代地改进它。

答案 1 :(得分:0)

我正在运行Vertica 8.1.0-1,似乎问题是Vertica规划阶段的Vertica错误导致性能下降。它在版本> = 8.1.1中解决: [https://my.vertica.com/docs/ReleaseNotes/8.1.x/Vertica_8.1.x_Release_Notes.htm]

  

VER-53602 - 优化程序 - 此修复程序在查询规划阶段提高了复杂的查询性能。