Рассказ автора
Первоначально я думал, что тип данных MySQL-это очень простое и базовое знание, и я думал, что почти овладел им. Но после последнего интервью я обнаружил, что у меня не было четкого понимания многих деталей и принципов. Позже я прочитал книгу “Высокая производительность mysql ” и внимательно прочитал четвертую главу. Оптимизация схемы и типов данных 。 Поэтому напишите эту статью, чтобы записать и обобщить, а также углубить понимание.
Выберите оптимизированный тип данных
Независимо от типа хранилища, вот несколько простых принципов, которые помогут вам сделать лучший выбор
- Меньше, как правило, лучше
- Просто-это хорошо.
- Старайтесь избегать нулевого значения
Целочисленный тип
КРОШЕЧНЫЙ | 8 место |
МЕЛОЧЬ | 16 место |
МЕДИУМИНТ | 24 место |
ИНТ | 32 место |
БИГИНТ | 64 место |
Диапазон значений: – 2 ^ (n-1) – 2 ^ (n-1) – 1, количество бит n-разрядного пространства для хранения. Целочисленные типы имеют необязательные типы без знака, что означает, что отрицательные значения не допускаются, что примерно удваивает верхний предел положительных чисел. Например, tinyint без знака может хранить от 0 до 255, в то время как tinyint может хранить от – 128 до 127. Подписанные и неподписанные типы используют одинаковое пространство для хранения и имеют одинаковую производительность, поэтому соответствующий тип можно выбрать в соответствии с реальной ситуацией.
MySQL может указать ширину для целочисленных типов, таких как int (11), что бессмысленно для большинства приложений. Он не ограничивает допустимый диапазон значений, но определяет количество символов, используемых некоторыми интерактивными инструментами MySQL (такими как клиент командной строки MySQL). Для хранения и вычисления значения int (1) и int (20) одинаковы.
Тип действительного числа
Точность может быть указана как для типов с плавающей запятой, так и для десятичных. Для десятичных столбцов можно указать максимальное количество цифр, разрешенных до и после десятичной точки. Это влияет на потребление пространства столбцами. MySQL 5.0 и более поздние версии упаковывают числа в двоичную строку (9 чисел на 4 байта). Например, decimal (18,9) хранит 9 чисел с обеих сторон десятичной точки, используя в общей сложности 9 байтов, 4 байта до и после десятичной точки и 1 байт для десятичной точки.
Типы с плавающей запятой обычно используют меньше места, чем десятичные, при хранении одного и того же значения. Float использует 4 байта, а double-8 байт. По сравнению с поплавком, он обладает более высокой точностью и большим диапазоном.
Из-за необходимости дополнительного пространства и вычислительных затрат мы должны стараться использовать десятичную дробь только при точном вычислении десятичных знаков, например, при хранении финансовых данных. Однако, когда объем данных велик, вы можете рассмотреть возможность использования bigint вместо десятичной дроби. Умножьте значение, которое будет сохранено, на количество знаков после запятой на соответствующее кратное.
Строковый тип
Varchar и char являются наиболее важными типами строк
ВАРЧАР
Varchar в основном используется для хранения строк переменной длины, что экономит больше места, чем строки фиксированной длины. За одним исключением, если таблица MySQL создана с помощью, каждая строка будет храниться фиксированной длины. Varchar требует 1 или 2 дополнительных байта для хранения длины строки. Если максимальная длина столбца меньше или равна 255, то используется 1 байт, в противном случае используется 2 байта. Varchar экономит место для хранения и хорош для производительности. Однако, поскольку строка длиннее, она может быть длиннее при обновлении, что требует дополнительной работы. Сценарии, подходящие для varchar: максимальная длина столбца строки намного больше средней длины; обновление столбца меньше.
ОБУГЛИТЬ
Тип символа имеет фиксированную длину, подходит для хранения очень коротких строк или все значения близки к одной и той же длине. Например, он очень подходит для хранения значения пароля MD5. Для часто меняющихся столбцов char лучше, чем varchar.
Примечание: стоимость пространства при использовании varchar (5) и varchar (200) для хранения Hello одинакова, но более длинные столбцы потребляют больше памяти, поскольку MySQL обычно выделяет блоки памяти фиксированного размера для хранения внутренних значений. Лучшая стратегия-выделить только то пространство, которое вам действительно нужно.
Тип даты и времени
MySQL может использовать множество типов для сохранения времени и даты, таких как год и дата. MySQL может хранить время с минимальной детализацией в секунды. Здесь представлены два аналогичных типа данных, дата-время и метка времени.
ДАТА И ВРЕМЯ | 1001 ~ 9999 | 8 байт |
ОТМЕТКА ВРЕМЕНИ | 1970-2038 | 4 байта |
Как правило, вы должны попытаться использовать метку времени, которая более эффективна, чем дата-время. Некоторые люди будут хранить временные метки UNIX в виде целых значений, но это не принесет никаких преимуществ (за исключением особых случаев, как показано ниже), а обработка данных неудобна, поэтому не рекомендуется этого делать.
Рекомендуется использовать тип bigint для хранения меток времени в микросекундах или double для хранения десятичной части после второй, когда значения даты и времени должны храниться с меньшей степенью детализации, чем вторая.
резюме
В этой статье в основном представлены часто используемые типы данных MySQL. Если есть ошибки или неточности, добро пожаловать на обмен.