При профилировании кода авторы заметили, что в случае базового варианта C-Store основная часть команд выполняется на ранних стадиях плана (применение предикатов), и что использование метода скрытых соединений делает выполнение соединений осносительно дешевым. Для дальнейшего анализа этого наблюдения была создана денормализованая версия таблицы фактов, в которой таблица фактов и ее таблицы измерений были заранее соединены, так что вместо внешнего ключа к таблице измерений таблица фактов содержала все значения таблицы измерений, повторяющиеся для каждой записи таблицы фактов (например, вся информация о заказчике содержится к каждом кортеже таблицы фактов, соответствующем заказу, который сделал этот заказчик). Понятно, что в строчном хранилище эта полная денормализация была бы более пагубной с точки зрения производительности, поскольку привела бы к существенному расширению таблицы. Однако можно было бы ожидать, что это ускорит выполнение запросов в колоночном хранилище, поскольку нужно было бы считывать только столбцы, имеющие отношение к запросу, и можно было бы избежать выполнения соединений.
К своему удивлению, авторы обнаружили, что часто эти ожидания не оправдываются. На рис. 8 сравнивается производительность варианта C-Store с использованием скрытых соединений, обсуждавшегося в предыдущем пункте, с производительностью на том же рабочем наборе трех вариантов единой денормализованной таблицы, для которой соединения были выполнены заранее. В первом случае в денормализованную таблицу включались без изменения полные строки, такие как названия регионов и стран. В этом случае производительность оказалась в пять раз ниже производительности базового варианта. Это связано с тем, что скрытое соединение преобразует предикаты на атрибутах таблицы измерений в предикаты на значениях внешнего ключа таблицы фактов. Когда таблица денормализуется, предикаты применяются к реальному атрибуту символьных строк таблицы фактов. В обоих случаях применение предиката является доминирующим шагом.
Однако предикат на целочисленном внешнем ключе может вычисляться быстрее предиката на атрибуте со значениями-строками символов, поскольку целочисленный атрибут короче.
Конечно, атрибуты типа символьных строк можно было бы легко перекодировать по словарю в целые числа до денормализации. Когда авторы проделали это (случай «PJ, Int C» на рис. 8), разница в производительности между базовым и денормализованным вариантами стала гораздо меньше. Тем не менее, для довольно многих запросов базовый вариант по-прежнему работал быстрее. Для этого имеются две причины. Во-первых, в некоторых запросах SSBM присутствуют два предиката на одной таблице измерений. Метод скрытых соединений может обобщить результат этого двойного применения предиката как один предикат на атрибуте внешнего ключа таблицы фактов. Однако в денормализованном варианте предикаты должны полностью применяться к обоим столбцам таблицы фактов (напомним, что в хранилищах данных таблица фактов, вообще говоря, гораздо крупнее таблиц измерений, и поэтому применение предикатов к таблице фактов обходится намного дороже, чем их применение к таблице измерений).
