DECIMAL vs INT, что является лучшим оптимизированным выбором? - PullRequest
4 голосов
/ 02 декабря 2009

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

Все эти данные имеют размер 99999,99 г (с точностью до килоджоулей), поэтому я мог бы использовать DECIMAL (7,2) или DECIMAL (5,2) с более старыми версиями MySql.

Однако на сайте mysql я видел, что тип данных DECIMAL более тяжелый, чем MEDIUMINT (я не прав?), Которого может быть достаточно для хранения данных.
В основном я буду выполнять числовые операции с десятичными числами. или всплывает с компьютера пользователя, и не нужно их снова хранить, так что я сомневаюсь, какой тип данных в этом случае лучший.

так какой же самый лучший тип данных в этом случае?

Ответы [ 4 ]

11 голосов
/ 02 декабря 2009

Одной из целей баз данных является обеспечение и обеспечение целостности данных, а также хранение данных в формате , максимально приближенном к естественному формату типа данных, которые необходимо хранить. Имея это в виду, вы не должны пытаться оптимизировать типы данных для механизма базы данных преждевременно (если вы не сделали тесты и у вас есть очень веские причины). Вместо этого ваши усилия лучше потратить на надлежащее проектирование структур таблиц с правильными отношениями и создание индексов, где это уместно, чтобы помочь ядру базы данных справиться с объемом и типами данных, которые у вас есть. Вы будете удивлены, сколько данных может обработать механизм БД, если данные нормализованы должным образом и индексы и связи создаются там, где это необходимо.

Таким образом, в качестве наилучшей практики предпочтение отдается типу DECIMAL для хранения десятичных или дробных чисел, таких как цены, дробные количества и т. Д.

1 голос
/ 02 декабря 2009

Храните данные как можно точнее. Вы всегда можете обрезать его при выборе.

Вы можете сожалеть о том, что не сохраняете дополнительные данные через год, когда вам нужна точность.

0 голосов
/ 02 декабря 2009

Учитывая, что вам нужна точность, продолжайте использовать DECIMAL и не используйте типы с плавающей точкой. DECIMAL выполнит преобразования, которые вам понадобятся, если вы используете MEDIUM int.

Попробуйте прочитать это как-нибудь, почему: http://docs.sun.com/source/806-3568/ncg_goldberg.html

0 голосов
/ 02 декабря 2009

Насколько я понимаю, DECIMAL предназначен для точной арифметики с фиксированной точкой , которая является относительно эзотерической ветвью численных вычислений. Он используется, когда вы работаете с числами с целой и дробной частями, но когда нельзя допустить ошибки, свойственные арифметике с плавающей запятой (например, учет).

Так что я думаю, что если вы еще не знаете, что вам нужно использовать DECIMAL, вы, вероятно, не знаете.

...