Добрі настанови до розробці DB MySQL

//

Операторы DESCRIBE и EXPLAIN являются синонимами и используются либо для получения информации о структуре таблицы, либо для планов выполнения запроса.

Типы данных

//dev.mysql.com/doc/refman/8.0/en/data-types.html

!!! Типы данных MySQL https://metanit.com/sql/mysql/2.3.php

Type Size Comment
CHAR
VARCHAR
TINYTEXT 255B
TEXT 64K
MEDIUMTEXT 16MB ...

 

Внутренний

Числовые типы

Типы

Числовые типы имеют фиксированный размер в хранилище и при вычислениях. Указываемый после типа размер (Length) определяет только отображаемую ширину.

    • TINYINT 1 byte
    • SMALLINT 2 bytes
    • MEDIUMINT 3 bytes
    • INT, INTEGER 4 bytes
    • BIGINT 8 bytes
    • FLOAT(p) 4 bytes if 0 <= p <= 24, 8 bytes if 25 <= p <= 53
    • DOUBLE [PRECISION], REAL 8 bytes

 

  • DECIMAL(M,D), NUMERIC(M,D) Varies; see following discussion
  • BIT(M) approximately (M+7)/8 bytes

Символьные типы

Типы

MySQL 8.0 Reference Manual > Data Types > String Data Types //dev.mysql.com/doc/refman/8.0/en/string-types.html

  • CHAR(M) The compact family of InnoDB row formats optimize storage for variable-length character sets. See COMPACT Row Format Storage Characteristics. Otherwise, M × w bytes, <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set.
  • BINARY(M) M bytes, 0 <= M <= 255
  • VARCHAR(M), VARBINARY(M) L + 1 bytes if column values require 0 − 255 bytes, L + 2 bytes if values may require more than 255 bytes
  • TINYBLOB, TINYTEXT L + 1 bytes, where L < 28
  • BLOB, TEXT L + 2 bytes, where L < 216
  • MEDIUMBLOB, MEDIUMTEXT L + 3 bytes, where L < 224
  • LONGBLOB, LONGTEXT L + 4 bytes, where L < 232
  • ENUM('value1','value2',...) 1 or 2 bytes, depending on the number of enumeration values (65,535 values maximum)
  • SET('value1','value2',...) 1, 2, 3, 4, or 8 bytes, depending on the number of set members (64 members maximum)

Столбцы TEXT, BLOB и JSON по-разному реализованы в механизме хранения NDB, где каждая строка в столбце состоит из двух отдельных частей. Один из них имеет фиксированный размер (256 байт для TEXT и BLOB, 4000 байт для JSON) и фактически хранится в исходной таблице. Другой состоит из любых данных, превышающих 256 байт, которые хранятся в скрытой таблице частей больших двоичных объектов. Размер строк в этой второй таблице определяется точным типом столбца, как показано в следующей таблице:

  • BLOB, TEXT 2000
  • MEDIUMBLOB, MEDIUMTEXT 4000
  • LONGBLOB, LONGTEXT 13948
  • JSON 8100

!!! Константа в формает HEX задается: X'A1FF'

Значения даты и времени

Типы

/

  • DATE - Дата
    Поддерживает диапазон от '1000-01-01' до '9999-12-31', отображается значения DATE в формате 'YYYY-MM-DD', допускает присваивание преобразованием из строковых и числовых значений
  • DATETIME[(fsp)] Дата и Время, необязательный fsp от 0 до 6 задает точность долей секунды (по умолчанию 0)
    Поддерживает диапазон от '1000-01-01 00:00:00,000000' до '9999-12-31 23:59:59,999999', отображается в формате 'YYYY-MM-DD hh:mm:ss[.fraction]', позволяет присваивать преобразование из строковых и числовых значений.
  • TIMESTAMP[(fsp)] Отметка времени, необязательное fsp от 0 до 6 задает точность долей секунды (по умолчанию 0)
    Диапазон от '1970-01-01 00:00:01.000000' UTC до '2038-01-19 03:14:07.999999' UTC. Значение содержит количество (больше нуля) секунд с начала эпохи '1970-01-01 00:00:00' UTC.
  • TIME[(fsp)] Время, необязательное fsp от 0 до 6 задает точность долей секунды (по умолчанию 0)
    Диапазон составляет от '-838:59:59.000000' до '838:59:59.000000', отображается в формате 'hh:mm:ss[.fraction]', позволяет присваивать преобразоанием строковых и числовых значений.
  • YEAR[(4)] Год в 4-значном формате. MySQL отображает значения YEAR в формате YYYY, позволяет присваивать значения столбцам YEAR, используя либо строки, либо числа.
    Диапазон от 1901 до 2155 или 0000.
!!! во временной зоне UTC: 2023-10-05T15:06:44.000Z
!!! Внутреннее представление типов

Внутреннее представление DATETIME реализуется целым числом, десятичное представление которого соответствует строковому UNIX-представлению:
Datetime(0) '2022-12-15 01:02:54' >> 20221215010254

Версии MySQL до 5.6 использовали для типа TIMESTAMP числовое значение x32 с максимальным значением 2147476447, соответствующим '2038-01-19 03:14:07.999999'. Современные версии MySQL используют новый метод представления x64 со значительно большим диапазоном возможных дат и визуально контролируемым представлением, но при этом числовые операции с этим значением могут дать некорректный результат.

Індекс /Index

MySQL 8.0 Reference Manual > CREATE INDEX Statement //dev.mysql.com/doc/refman/8.0/en/create-index.html

...

Тип индекса

  • UNIQUE индексирует уникальные значения в поле или группе полей, но допускает несколько значений NULL
  • NORMAL индексирует произвольные значения в поле, части поля, группе полей или их частей
  • SPATIAL применяются к полям типа POINT и GEOMETRY
  • FULLTEXT индексирует полное значение поля типа CHAR, VARCHAR и TEXT таблиц InnoDB и MyISAM (определении префикса игнорируется)

Метод индекса

  • BTREE реализуются механизмом хранения NDB как индексы T-дерева.
  • HASH реализуются значением хэш-функции, поэтому не применимы для сортировки и не применяются к составным индексам.

Leave a Reply