MySQL: десятичное число (5,0) против INT (11) для целых чисел от 0 до 99999 - производительность и дисковое пространство - PullRequest
1 голос
/ 16 ноября 2011

Int (11) равно 4 байта, правильно? Десятичное число (5,0) - 5 перед десятичным и 0 после десятичного ... Я не уверен насчет количества байтов, которое требуется ... (0..99999 ... 65536 займет два байта) ... тогда десятичное число (5,0) занимает 3 байта?

Что лучше использовать, если мы говорим о производительности?

Таблица изменяется вручную (время от времени), поэтому есть только ВЫБОРЫ ИЗ этой таблицы.

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

Из некоторых предварительных испытаний кажется, что требования к хранилищу фактически одинаковы, используете ли вы INT (11) или DECIMAL (5,0).Я создал 2 таблицы со следующими запросами.

CREATE TABLE Table1(id INT(11));

CREATE TABLE Table2(id DECIMAL(5,0));

После вставки по одному значению в каждую таблицу и выполнения следующего для обеих таблиц я увидел, что DATA_LENGTH для каждой строки равно 7. Увеличение количества добавленных строкразмер любой таблицы на 7 байт.

SELECT * FROM INFORMATION_SCHEMA.tables where table_name='Table1';

Как и во всех подобных вещах, самый простой способ выяснить это - создать несколько таблиц и проверить их.В этом случае я бы просто использовал INT (11), так как он, кажется, не требует дополнительного пространства и, вероятно, требует меньше обработки, поскольку целые числа являются более примитивным типом данных, с которым процессор может иметь дело напрямую.При использовании DECIMAL MySQL должен преобразовывать числа в формат, который процессор может использовать на самом деле, возможно, в любом случае целое число в этом случае, и, вероятно, существуют какие-то издержки, связанные с переходом назад и вперед между форматами.

1 голос
/ 16 ноября 2011

Это сильно зависит от используемой вами версии MySQL.

Для MySQL 4 см. http://dev.mysql.com/doc/refman/4.1/en/numeric-types.html.

Для MySQL 5.0.3 и выше см. http://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-changes.html.

Для MySQL 5.1 и выше см. http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html.

...