CHAR (5) против INT - PullRequest
       33

CHAR (5) против INT

1 голос
/ 14 августа 2010

INFORMIX-SE 7.1:

Предположим, что col5 CHAR (5) будет содержать только числа от 00001 до 99999:

  1. столбец CHAR (5) использует 5 байт памяти, сколько байтов использует INTEGER?
  2. Работает ли УНИКАЛЬНЫЙ ИНДЕКС на столбце INT быстрее, чем CHAR (5)? ​​
  3. Является ли SELECT MAX () в столбце INT быстрее, чем MAX () в col5 CHAR (5)? ​​

Ответы [ 4 ]

4 голосов
/ 14 августа 2010

CHAR(5) всегда будет использовать 5 байт пространства (10 в многобайтовых кодировках начиная с mySQL 4.1), потому что каждый символ может хранить 255 различных символов (или даже больше в многобайтовых кодировках).

Без знака SMALLINT (0..65535) потребуется 2, без знака MEDIUMINT (0 .... 16,7 миллионов) 3 байта.

Bottomстрока: Использование типа CHAR для числовых данных всегда является пустой тратой пространства.

Что касается двух других вопросов:

Выполняет ли UNIQUE INDEX для столбца INTбыстрее, чем CHAR (5)? ​​

Очень, очень вероятно, да, потому что индекс не должен быть буквенно-цифровым и может работать с меньшим количеством данных

SELECT MAX () в столбце INT быстрее, чем MAX () в col5 CHAR (5)? ​​

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

Ссылка:

2 голосов
/ 14 августа 2010

INT использует 4 байта. И вы можете хранить 0 ... 4294967295 (без знака) с INT

Кстати, я бы не использовал CHAR, VARCHARили любой тип string-y для хранения чисел.Вы просто напрашиваетесь на неприятности здесь.Например, 9 больше 10, если вы используете сравнение строк.Вы также пропустите множество арифметических операций.

1 голос
/ 15 августа 2010
  • INFORMIX-SE 7.1:

Становление ближе к поддерживаемой версии (чем 4.10 или 2.10), но все еще десятилетие и более из поддержки.

Предположим, что col5 CHAR (5) будет содержать только числа от 00001 до 99999:

  1. столбец CHAR (5) использует 5 байт памяти, сколько байтов использует INTEGER?
  2. Работает ли УНИКАЛЬНЫЙ ИНДЕКС на столбце INT быстрее, чем CHAR (5)? ​​
  3. SELECT MAX () в столбце INT быстрее, чем MAX () в col5 CHAR (5)? ​​
  1. 4 байта для INTEGER в СУБД Informix.
  2. Незначительно. Вопрос о том, является ли он действительно измеримым, открыт для обсуждения, но данных для сравнения немного меньше (на один байт меньше), а значит, еще меньше.
  3. Опять же, разница вряд ли измерима. Если в столбце есть индекс, обе операции просто получают доступ к индексу. Если индекса нет, то обе операции заканчивают чтением таблицы (сканирование таблицы), и за работу с 5 символами вместо 4 байтов взимается незначительное наказание.
1 голос
/ 14 августа 2010

4 байта для INT. INT быстрее!

Для более подробной информации, проверьте выбранный ответ на этот вопрос:

...