LINUX.ORG.RU

БД integer vs varchar


0

0

имеется поле, содержащее некий код. Код числовой, от 0 до 1000, и это не изменится. Арифметические операции над кодом не имеют смысла.

Какой тип поля следует выбрать для этого поля? Аргументы за integer - скорость, автоматическое ограничение домена. Аргументы за varchar больше идеологические - раз это не истинное число, т.е. арифметика к нему неприменима, значит не нужно его делать числом.

Как правильно?

★★★★★

Правильно - число. Потому, что в условиях WHERE его использовать придется наверняка, опять же если индекс - то это значение попадет непосредственно в индекс и сервер СУБД в таблицу даже заглядывать не станет, чтобы значение определить, т.е. быстрее.

anonymous
()

> Код числовой

значит числом. smallint, mediumint итп что больше подходит.

true_admin ★★★★★
()

если это то, что хомосапиенсы называют номером (номер дома, рейса автобуса или поезда, номер приказа), то это однозначно строка. Потому что рано или поздно (скорее рано) начнутся требования сделать поддержку записей типа "123 к.2", "123у" или "N 123-2".

Если это по своей природе число, и такие "естественные извращения" ему не грозят, то, конечно, integer для машины в общем случае удобнее.

alexsaa
()

> имеется поле, содержащее некий код. Код числовой, от 0 до 1000, и это не изменится. Арифметические операции над кодом не имеют смысла.

а как отношением порядка для этих кодов? Если лексикографический порядок - 1,10,199,2, ... не кажется естественным то наверно лучше все таки число будет.

gods-little-toy ★★★
()
Ответ на: комментарий от anonymous

> Потому, что в условиях WHERE его использовать придется наверняка, опять же если индекс - то это значение попадет непосредственно в индекс и сервер СУБД в таблицу даже заглядывать не станет, чтобы значение определить, т.е. быстрее.

1. в таблицу не заглядывать - это зависит от СУБД, далеко не во всех такое есть.

2. Как возможность не заглядывать в таблицу связана с типом данных??

gods-little-toy ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.