У меня есть устаревшая схема (отказ от ответственности!), Которая использует сгенерированный на основе хеш-кода идентификатор для первичного ключа для всех таблиц (их много). Пример такого идентификатора:
922475bb-ad93-43ee-9487-d2671b886479
Нет надежды на изменение этого подхода, однако производительность с доступом к индексу низкая. Откладывая множество причин , это может быть, есть одна вещь , которую я заметил , что , казалось , меньше оптимальной - несмотря на все значения идентификаторов во всех многих таблиц , являющихся ровно 36 символов в длину, тип столбца varchar(36)
, не char(36)
.
Принесет ли изменение типов столбцов фиксированной длины char(36)
какие-либо существенные преимущества в производительности индекса, помимо очень небольшого увеличения числа записей на страницу индекса и т. Д.?
Т.е. работает ли postgres намного быстрее при работе с типами фиксированной длины, чем с типами переменной длины?
Пожалуйста, не упоминайте о незначительной экономии памяти - это не имеет значения по сравнению с операцией, необходимой для внесения изменений в столбцы.
источник
char(n)
почти никогда не побеждает в любом отношении. Не используйте это. Типы данныхtext
иvarchar
(без модификатора длины) двоично совместимы и имеют одинаковые характеристики производительности. Существуют исторические причины для того, чтобы оба сосуществовали в Postgres. Внутренне,text
это «предпочтительный» тип среди строковых типов (который может влиять на разрешение типа функции). Циклы ЦПУ для обеспечения выполненияvarchar(n)
практически не имеют значения. Используйте ограничение длины, когда вам это нужно . В данном случаеuuid
это настоящий победитель.