Наиболее эффективный тип данных для столбца фиксированной длины - PullRequest
0 голосов
/ 15 октября 2018

Я только нахожусь в процессе проектирования структур моей базы данных.

Существует несколько столбцов фиксированной длины, по крайней мере один из которых является буквенно-цифровым.

Следовательно, ямне интересно:

  1. Какой (или являются) наиболее эффективный тип (ы) данных для столбцов фиксированной длины в целом?
  2. Какие (или являются) наиболее эффективные данныетип (ы) для буквенно-цифровых столбцов фиксированной длины?
  3. Почему?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Краткий ответ: Как говорит Тадман: «Используйте VARCHAR и не беспокойтесь об этом»

Длинный ответ:

Пространство, занимаемое столбцом, является основным фактором как для пространства, так и для него.speed.

Можно объявить действительно строки фиксированной длины CHAR(..).Очень часто они состоят только из символов ascii, поэтому «правильный» способ сделать это, например,

country_code CHAR(2) CHARACTER SET ascii
uuid CHAR(36) CHARACTER SET ascii

Разница между фиксированной длиной VARCHAR вместо CHAR - это 1- или 2-байтовое поле длины, предшествующее фактической строке.Если у вас нет миллиардов строк, это не имеет большого значения.

Разница в скорости обработки незначительна, но CHAR и ascii выигрывают.

Если у вас есть всечисловые строки, вы можете хотите использовать INT 4 байта или BIGINT 8 байтов или DECIMAL(30) 14 байтов и т. д. - вместо использования CHAR или VARCHAR, который будет иметь 1байт на цифру.Числовые поля имеют фиксированную длину.Но будь осторожен.Телефонные номера в США имеют фиксированную длину, но международные номера различаются.

Вы подразумеваете, что есть что-то, кроме "буквенно-цифрового"Если вы ссылаетесь на BINARY / VARBINARY / BLOB, то правила в основном одинаковы.

Например, значение uuid может быть уменьшено с CHAR(36) (36 байт) до BINARY(16) (16 байт) с помощью подходящего преобразования.Последнее лучше для скорости и пространства, но добавляет сложности вашему коду.(Во всяком случае, uuids ужасны для огромного стола; это другая тема.)

С целыми числами всегда учитывайте BIGINT против INT против MEDIUMINT против SMALLINT против TINYINT, и обычно тэксна UNSIGNED.(Они занимают 8/4/3/2/1 байт соответственно.) Сделайте это при первоначальном создании таблицы;ALTER позже делать грязно.

0 голосов
/ 16 октября 2018

Используйте VARCHAR и не беспокойтесь об этом.

Эта проблема возникает только тогда, когда вы обрабатываете столько данных, которые не помещаются на одном диске, или даже на одном дискесервер переполнен дисками.

У компаний, которые управляют базами данных с несколькими миллиардами строк, есть проблемы с этим, но вы не будете, пока не станете такими большими.

...