我正在使用星型模式和单个非规范化表对向量进行一些测试。在非规范化表中,我有 5 个额外的列 > varchar (100)。我是面向列的世界的新手,因此想了解正确的事实。
几个事实:
查询内存=20G,Cache Memory设置为7G
仅名称列的大小就在 6G、6.5G、2.6G 和 650M 左右。现在显然这些不适合我的缓存内存,所以系统是 I/O 绑定的。
如果我使用星型模式方法,它的工作速度会更快,因为它必须缓存整数列,所有这些都可以轻松放入我的主内存缓存中。
我对此有几个问题:
如果我必须使用单个表,我需要增加 RAM 以确保所有这些列都适合内存?我想知道是否有人使用 Vertica 或任何其他面向列的数据库完成了这种结构。如果是,您是否使用相同的方法所有 varchar 列都应该适合 RAM ?
简单的星型模式查询
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?