Я выполняю несколько векторных тестов, используя звездную схему и одну денормализованную таблицу. В денормализованной таблице у меня есть 5 дополнительных столбцов, которые> varchar (100). Я новичок в мире, ориентированном на колонки, и, следовательно, хочу понять, чтобы правильно понимать мои факты.
Немного фактов:
Память запросов = 20 ГБ, кэш-память установлена на 7 ГБ
Размер только столбцов имен составляет около 6 ГБ, 6,5 ГБ, 2,6 ГБ и 650 МБ. Теперь очевидно, что они не помещаются в моей кеш-памяти, поэтому система ограничена вводом-выводом.
Если я использую подход со звездообразной схемой, он работает быстрее, поскольку тогда он должен кэшировать целочисленные столбцы, поскольку все они могут легко поместиться в мой основной кеш памяти.
У меня есть несколько вопросов по этому поводу:
Если мне нужно использовать одну таблицу, мне нужно увеличить объем оперативной памяти, чтобы все эти столбцы поместились в памяти? Я хотел бы знать, создавал ли кто-нибудь такую структуру с использованием Vertica или любых других баз данных, ориентированных на столбцы. Если да, то используете ли вы один и тот же подход, чтобы все столбцы varchar поместились в ОЗУ?
Простой запрос звездообразной схемы
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?