0

我正在使用星型模式和单个非规范化表对向量进行一些测试。在非规范化表中,我有 5 个额外的列 > varchar (100)。我是面向列的世界的新手,因此想了解正确的事实。

几个事实:

  1. 查询内存=20G,Cache Memory设置为7G

  2. 仅名称列的大小就在 6G、6.5G、2.6G 和 650M 左右。现在显然这些不适合我的缓存内存,所以系统是 I/O 绑定的。

  3. 如果我使用星型模式方法,它的工作速度会更快,因为它必须缓存整数列,所有这些都可以轻松放入我的主内存缓存中。

我对此有几个问题:

  1. 如果我必须使用单个表,我需要增加 RAM 以确保所有这些列都适合内存?我想知道是否有人使用 Vertica 或任何其他面向列的数据库完成了这种结构。如果是,您是否使用相同的方法所有 varchar 列都应该适合 RAM ?

  2. 简单的星型模式查询

    select col1,col2, col3, sum(col4), sum(col5) from fact_table join tabl1 on condition join tab2 on condition where tab1.col1 = 1234 and tab2.col2 = 6789

    工作速度慢于:

    select col1,col2,col3,sumcol4, sumcol5 from (select col1,col2, col3, sum(col4) as sumcol4, sum(col5) as sumcol5 from fact_table where fact_table.col1 = 1234 and fact_table.col2 = 6789) as facts join tabl1 on condition join tab2 on condition

    为什么?

    注意:主表 tab1 和 tab2 是主存的。

我正在使用Vectorwise,但只是想知道这些观察结果是否也适用于 Vertica?

4

1 回答 1

0

Vertica 没有将表保存在内存中的想法。在某些情况下,在某些类型的连接中,表数据可能已经在内存中或被放在那里。但归根结底,Vertiac 的性能取决于您在磁盘上存储内容的方式。

我不希望 Vectorwise 中的两个查询的性能对 Vertica 中类似查询和表的执行方式有任何影响。也就是说,第二个查询中与连接有关的行数较少表明它在各种查询执行引擎中会做得更好。

于 2012-09-18T21:50:26.787 回答