Другим фактором, который следует учитывать при использовании широкой таблицы (много столбцов), является влияние на кэш RDBMS. Любой хороший разработчик знает, что вы не делаете «выбор * из таблицы», поскольку он будет передавать ненужные данные по сети от СУБД к клиенту. Но аналогичный эффект может произойти между диском и оперативной памятью, а также повлиять на объем пространства в оперативной памяти, необходимый для кэширования таблицы.
Большинство СУБД выделяют определенный объем памяти для кэширования данных, тем самым сокращая чтение с физического диска и ускоряя реакцию пользователя. Это буферный кеш в Oracle или SQL Server
Если у вас есть широкая таблица и вы выполняете запрос в форме «выберите столбец col1, col2, col3 из таблицы», СУБД загрузит полные строки в ОЗУ (а не столбцы с 1 по 3). При этом он устареет из старых кэшированных данных. Если ваша таблица широкая и вы загружаете 50 столбцов, вам, конечно, требуется больше оперативной памяти, чем для того же числа строк * узкой таблицы. Это может оказать заметное влияние на производительность РСУБД.
Множество широких таблиц, устаревание других таблиц из кеша, и можно увидеть, как статистика ввода-вывода проходит сквозь крышу, поскольку обычно используемые таблицы устаревают из кэша, чтобы освободить место для широких таблиц.
Этот фактор должен быть добавлен к другим преимуществам нормализованных данных и учтен во время разработки таблицы. Фактически, если у вас есть потенциально широкая таблица с некоторыми данными, к которым будет осуществляться регулярный доступ, а с некоторыми, которые будут редкими, рассмотрите несколько таблиц с отношением 1: 1.