2010-08-14 2 views
1

INFORMIX-SE 7.1:СИМ (5) против INT

Предположим, что col5 СИМ (5) будет содержать только цифры от 00001 до 99999:

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

ответ

1
  • INFORMIX-SE 7.1:

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

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

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

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

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

+1

В этом столбце не выполняются арифметические операции, их номера билетов, которые в зависимости от способа обновления строки изменяются. –

4

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

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

Итог: Использование типа CHAR для цифровых данных - это пустая трата пространства.

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

ли уникальный индекс столбца INT работают быстрее, чем CHAR (5)?

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

ли SELECT MAX() на колонке INT быстрее MAX() на col5 CHAR (5)?

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

Ссылка:

Смежные вопросы