Медленнее ли доступ к таблице в Postgres 9, если в ней есть дополнительные неиспользуемые столбцы?

#performance #postgresql

#Производительность #postgresql

Вопрос:

Представьте, что у меня есть таблица с двумя столбцами, первичным ключом и некоторыми данными. Эта таблица будет большой, и к ней будут обращаться очень часто.

Теперь представьте, что я хочу добавить еще один фрагмент данных, доступ к которому осуществляется крайне редко. Могу ли я с уверенностью предположить, что добавление другого столбца в таблицу не приведет к замедлению выполнения обычных запросов, если они не обращаются к новому столбцу?

Ответ №1:

Теоретически да: это будет медленнее, потому что на страницу диска поместится меньше строк. Чтобы прочитать строки таблицы, вам нужно посетить больше страниц.

На практике значения null занимают 1 бит места, а типы varlena хранятся в расширенном хранилище (toast). Таким образом, это оказывает незначительное влияние на материал.

Комментарии:

1. Я не говорил, что в новом столбце все значения равны нулю или даже в основном равны нулю. Фактически это будет в основном текст средней длины. Ваш ответ все еще применим?

2. @Timwi: Его ответ все еще применим. Текст средней длины будет храниться вне строки, как большой двоичный объект, за исключением того, что он прозрачен для вас. Наблюдаемая разница в скорости будет практически равна нулю.