Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: Naka в May 25, 2011, 11:14



Титла: Mysql - INTEGER, BIGINT или DECIMAL ?
Публикувано от: Naka в May 25, 2011, 11:14
Чудя се как е по ефективно да се реализира:

Имам поле в БД 'bytes' - отчита трафик в байтове, на определена услуга ;D

правя си сметките колко голямо трябва да бъде полето:

INT UNSIGNED 4 294 967 295   - 4 байта
BIGINT  UNSIGNED    (xxxxxxx.........xxxxx)                - 8 байта

но INT UNSIGNED ми е малко - трябва ми само още един десетичен разряд :'(
трябва да събера xx xxx xxx xxx  - 11 цифри, докато INT UNSIGNED ще събере долу горе 4 2xx xxx xxx -  10 цифри.


другата възможност е BIGINT, което е много, много голямо но там вече съхранението става от 4 на 8 байта.
В mysql няма и целочислен тип дето да е между INT и BIGINT :'(


Мисля си да използвам  DECIMAL(11,0). Документацията казва че след mysql 5.0.3 DECIMAL стойностите явно се съхраняват също като целочислените полета - 9 десетични цифри са събират в 4 байта - така че явно нещата са оптимизирани.
http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

За  DECIMAL(11,0)  -  5 bytes

та диалемата ми е как ще е по бързо и ефективно:

BIGINT - 8 байта (много повече от необходимото, по-големи таблици и вероятно малко - по бавно)
или
DECIMAL(11,0)  -  5 байта (минимален размер за съхранение - ще има ускорение от там - но пък може да е по бавно защото се обработват DECIMAL ???)


http://stackoverflow.com/questions/2682115/decimal-vs-int-in-mysql