//
Операторы 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name [ USING {BTREE | HASH} ] ON tbl_name ( {col_name [(length)] | (expr)} [ASC | DESC], ...) [ { <span class="token keyword">KEY_BLOCK_SIZE</span> <span class="token punctuation">[</span><span class="token operator">=</span><span class="token punctuation">]</span> <span class="token keyword"><em class="replaceable">value</em></span> <span class="token operator">|</span> <em class="replaceable">index_type</em> <span class="token operator">|</span> <span class="token keyword">WITH</span> <span class="token keyword">PARSER</span> <em class="replaceable">parser_name</em> <span class="token operator">|</span> <span class="token keyword">COMMENT</span> <span class="token string">'<em class="replaceable">string</em>'</span> <span class="token operator">|</span> {<span class="token keyword">VISIBLE</span> <span class="token operator">|</span> <span class="token keyword">INVISIBLE</span>} <span class="token operator">|</span> <span class="token keyword">ENGINE_ATTRIBUTE</span> <span class="token punctuation">[</span><span class="token operator">=</span><span class="token punctuation">]</span> <span class="token string">'<em class="replaceable">string</em>'</span> <span class="token operator">|</span> <span class="token keyword">SECONDARY_ENGINE_ATTRIBUTE</span> <span class="token punctuation">[</span><span class="token operator">=</span><span class="token punctuation">]</span> <span class="token string">'<em class="replaceable">string</em>'</span> } ] [ ALGORITHM [=] {DEFAULT | INPLACE | COPY} | LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE} ] ... |
...
Тип индекса
- UNIQUE индексирует уникальные значения в поле или группе полей, но допускает несколько значений NULL
- NORMAL индексирует произвольные значения в поле, части поля, группе полей или их частей
- SPATIAL применяются к полям типа POINT и GEOMETRY
- FULLTEXT индексирует полное значение поля типа CHAR, VARCHAR и TEXT таблиц InnoDB и MyISAM (определении префикса игнорируется)
Метод индекса
- BTREE реализуются механизмом хранения NDB как индексы T-дерева.
- HASH реализуются значением хэш-функции, поэтому не применимы для сортировки и не применяются к составным индексам.