Использование типа данных для 10-20-значного значения - PostgreSQL - PullRequest
0 голосов
/ 13 марта 2012

В настоящее время я занимаюсь разработкой приложения, которое должно хранить 10–20-значное значение в базе данных.

Мой вопрос: какой тип данных мне нужно использовать? Эта цифра используется в качестве первичного ключа, и поэтому для меня важна производительность БД. В Java я использую эту цифру как и BigDecimal.

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Цитата из руководства:

числовой: до 131072 цифр перед запятой;насколько я могу судить, до 16383 цифр после десятичной точки

http://www.postgresql.org/docs/current/static/datatype-numeric.html

131072 должны соответствовать вашим потребностям.

Редактировать:Чтобы ответить на вопрос об эффективности:

Первый и самый важный вопрос: какие данные хранятся в этом столбце и как вы их используете?

  • Если это числозатем используйте числовой.
  • Если это не число, используйте varchar.

Никогда, никогда не храните (реальные) числа в столбцах символов!

Если вам нужно отсортировать по этому столбцу, вы не будете удовлетворены тем, что выполучить, если вы используете тип символов (например, 2 будет отсортировано после 10)

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

Требования к хранилищу для числового типа данных также задокументированы:

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

Таким образом, для 20 цифр это будет максимум 10 байтов плюс служебные данные от пяти до восьми байтов.Так макс.18 байт.

Для хранения 20 цифр в столбце varchar необходимо 21 байт.

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

С точки зрения производительности, я тоже не думаю, что будет большая разница.

1 голос
/ 13 марта 2012

Попробуйте BIGINT вместо NUMERIC. Должно работать.

http://www.postgresql.org/docs/current/static/datatype-numeric.html

...