Большая разница в том, как данные хранятся на диске.
Давайте посмотрим на (над) упрощенный пример:
Предположим, у нас есть таблица с 50 столбцами, некоторые номера (хранится двоичный) и другие имеют фиксированную ширину текста - с общим размером записи 1024 байт. Количество строк составляет около 10 миллионов, что дает общий размер около 10 ГБ - и мы работаем на ПК с 4 ГБ оперативной памяти. (в то время как эти таблицы обычно хранятся в отдельных блоках на диске, мы будем считать, что данные хранятся в одном большом блоке для простоты).
Теперь предположим, что мы хотим суммировать все значения в определенном столбце (целые числа, сохраненные как 4 байта в записи). Для этого мы должны прочитать целое число каждые 1024 байта (наш размер записи).
Наименьший объем данных, которые могут быть считаны с диска, является сектором и обычно составляет 4 КБ. Поэтому для каждого прочитанного сектора мы имеем только 4 значения. Это также означает, что для того, чтобы суммировать весь столбец, мы должны прочитать весь файл размером 10 ГБ.
В хранилище столбцов, с другой стороны, данные хранятся в отдельных столбцах. Это означает, что для нашего целочисленного столбца мы имеем 1024 значения в 4096 байтовом секторе вместо 4! (и иногда эти значения могут быть дополнительно сжаты). Теперь все данные, которые нам нужно прочитать, составляют около 40 МБ, а не 10 ГБ, и это также останется в кеше диска для будущего использования.
Это еще лучше, если мы посмотрим на кэш CPU (при условии, что данные уже кэшированы с диска): одно целое каждые 1024 байта далеки от оптимального для кеша CPU (L1), тогда как 1024 целых числа в одном блоке будут иметь скорость (те будут в кеше L1, что примерно в 50 раз быстрее обычного доступа к памяти).