Сколько байтов Django / Postgres будет использовать для десятичного поля? - PullRequest
0 голосов
/ 25 января 2019

Я хотел бы сохранить процент с двумя десятичными знаками (от 0 до 100).Таким образом, десятичное поле (всего 5 цифр) кажется хорошим выбором, но smallint также выполнит работу только с двумя байтами.

Сколько байтов будет использовано в базе данных для этой конфигурации десятичного числаполе?И в качестве дополнительного вопроса, как бы я запросил Postgres, чтобы изучить детали структуры данных, используемых за кулисами?

1 Ответ

0 голосов
/ 25 января 2019

Документация гласит:

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

В вашем случае это будет от 5 до 10 байт.

Но размер памяти должен быть последним из ваших вопросов:

  • В зависимости от типов полей переди после этого числа вы, возможно, не сэкономите столько места, сколько думаете, потому что некоторые типы данных выровнены по границам 4 или 8 байт, и вы все равно можете потерять часть сэкономленного пространства для заполнения.
  • Если выиспользуйте много арифметических операций над этими данными (сжатие чисел), smallint или integer будет работать намного лучше, чем numeric.
  • С другой стороны, вам придется сдвигать запятую вокругво время арифметической обработки.Это быстро, но может сделать ваш код менее читабельным, что приведет к бремени обслуживания.

Чтобы узнать о хранении и обработке numeric, вам придется просмотреть исходный код.

...