#performance #postgresql
#Производительность #postgresql
Вопрос:
Представьте, что у меня есть таблица с двумя столбцами, первичным ключом и некоторыми данными. Эта таблица будет большой, и к ней будут обращаться очень часто.
Теперь представьте, что я хочу добавить еще один фрагмент данных, доступ к которому осуществляется крайне редко. Могу ли я с уверенностью предположить, что добавление другого столбца в таблицу не приведет к замедлению выполнения обычных запросов, если они не обращаются к новому столбцу?
Ответ №1:
Теоретически да: это будет медленнее, потому что на страницу диска поместится меньше строк. Чтобы прочитать строки таблицы, вам нужно посетить больше страниц.
На практике значения null занимают 1 бит места, а типы varlena хранятся в расширенном хранилище (toast). Таким образом, это оказывает незначительное влияние на материал.
Комментарии:
1. Я не говорил, что в новом столбце все значения равны нулю или даже в основном равны нулю. Фактически это будет в основном текст средней длины. Ваш ответ все еще применим?
2. @Timwi: Его ответ все еще применим. Текст средней длины будет храниться вне строки, как большой двоичный объект, за исключением того, что он прозрачен для вас. Наблюдаемая разница в скорости будет практически равна нулю.