Мой вопрос связан с внутренними принципами работы Postgres:
У меня есть таблица:
CREATE TABLE A (
id SERIAL,
name VARCHAR(32),
type VARCHAR(32) NOT NULL,
priority SMALLINT NOT NULL,
x SMALLINT NOT NULL,
y SMALLINT NOT NULL,
start timestamp with time zone,
end timestamp with time zone,
state Astate NOT NULL,
other_table_id1 bigint REFERENCES W,
other_table_id2 bigint NOT NULL REFERENCES S,
PRIMARY KEY(id)
);
с дополнительными индексами для other_table_id1, state и other_table_id2.
Таблица довольно большая и содержит очень много обновлений по столбцам: other_table_id1, state.Несколько обновлений для начального и конечного столбцов, но остальные являются неизменными.(Astate - это перечисляемый тип для состояния столбца.)
Мне интересно, имеет ли смысл разделять два наиболее часто обновляемых столбца на отдельную таблицу.То, что я надеюсь получить, это производительность, когда я просто просматриваю эту информацию, или чтобы уменьшить вес обновлений, потому что (возможно?) Чтение и запись более короткой строки дешевле.Но мне нужно сопоставить это со стоимостью объединений, когда им (иногда) необходимо иметь все данные для определенного элемента сразу.
В какой-то момент у меня сложилось впечатление, что каждый столбецхранится отдельно.Но позже я изменил свое мнение, когда где-то прочитал, что уменьшение ширины столбца на одной стороне таблицы положительно влияет на производительность при поиске данных с использованием другого столбца (поскольку строка хранится вместе, поэтому общая длина строки будетбыть короче).Теперь у меня сложилось впечатление, что все данные для строки физически хранятся вместе на диске;поэтому предложенное разделение таблицы звучит так, как будто это было бы полезно.Когда я в настоящее время пишу 4 байта для обновления состояния, могу ли я верить, что переписываю 64 байта текста (имя, тип), который на самом деле никогда не меняется?
Я не очень опытен с нормализацией таблицы "«Я не знаком с внутренностями Postgres, поэтому я ищу советы и особенно полезные практики для оценки компромисса без необходимости сначала выполнять работу, а затем определить, стоит ли эта работа.Изменение потребует немалых усилий при переписывании запросов, которые уже были высоко оптимизированы, поэтому я бы лучше понял, какого результата я могу ожидать.Спасибо, М.