Prefix индексы
Укажите одну или несколько колонок для формирования sort key при создании таблицы. Строки данных в таблице будут отсортированы на основе sort key и затем сохранены на диске.
Во время записи данных Prefix индекс создается автоматически. После сортировки данных в соответствии с указанным sort key каждые 1024 строки данных включаются в один логический блок данных. Запись индекса, состоящая из значений колонок sort key первой строки данных в этом логическом блоке данных, добавляется в таблиц у Prefix индекса.
С этими двумя уровнями структур сортировки запросы могут использовать бинарный поиск для быстрого пропуска данных, которые не соответствуют условиям запроса, а также могут избежать дополнительных операций сортировки во время запросов.
Prefix индекс является разреженным индексом, и его размер как минимум в 1024 раза меньше объема данных. Поэтому он обычно может быть полностью кэширован в памяти для ускорения производительности запросов.
Примечания по использованию
Начиная с версии 3.0, таблицы Primary Key поддерживают определение sort keys с использованием ORDER BY. Начиная с версии 3.3, таблицы Duplicate Key, таблицы Aggregate и таблицы Unique Key поддерживают определение sort keys с использованием ORDER BY.
-
Данные в таблице Duplicate Key сортируются в соответствии с sort key
ORDER BY. Sort key может быть комбинацией любых колонок.к сведениюКогда указаны и
ORDER BY, иDUPLICATE KEY,DUPLICATE KEYне вступает в силу. -
Данные в таблице Aggregate сначала агрегируются в соответствии с aggregate key
AGGREGATE KEY, затем сортируются в соответствии с sort keyORDER BY. Колонки вORDER BYиAGGREGATE KEYдолжны быть одинаковыми, но порядок колонок не обязательно должен быть одинаковым. -
Данные в таблице Unique Key сначала заменяются в соответствии с unique key
UNIQUE KEY, затем сортируются в соответствии с sort keyORDER BY. Колонки вORDER BYиUNIQUE KEYдолжны быть одинаковыми, но порядок колонок не обязательно должен быть одинаковым. -
Данные в таблице Primary Key сначала заменяются в соответствии с primary key
PRIMARY KEY, затем сортируются в соответствии с sort keyORDER BY.
Возьмем в качестве примера таблицу Duplicate Key. Sort key определяется как uid и name с использованием ORDER BY.
CREATE TABLE user_access (
uid int,
name varchar(64),
age int,
phone varchar(16),
last_access datetime,
credits double
)
ORDER BY (uid, name);
После создания таблицы вы можете использовать SHOW CREATE TABLE <table_name>;, чтобы просмотреть указанные колонки сортировки и порядок этих колонок в предложении ORDER BY из возвращенного результата.
Поскольку максимальная длина записи Prefix индекса составляет 36 байт, превышающая часть будет обрезана. Поэтому каждая запись в Prefix индексе этой таблицы - это uid (4 байта) + name (берутся только первые 32 байта), и prefix поля - это uid и name.
Примечание
-
Количество prefix полей не может превышать 3, а максимальная длина записи Prefix индекса составляет 36 байт.
-
В пределах prefix полей колонки типа CHAR, VARCHAR или STRING могут встречаться только один раз и должны находиться в конце.
Возь мем в качестве примера следующую таблицу, где первые три колонки являются колонками sort key. Prefix поле этой таблицы -
name(20 байт). Это связано с тем, что этот Prefix индекс начинается с колонки типа VARCHAR (name) и обрезается напрямую без включения дальнейших колонок, даже если запись Prefix индекса не достигает 36 байт в длину. Поэтому этот Prefix индекс содержит только полеname.MySQL [example_db]> describe user_access2;
+-------------+-------------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-------+---------+-------+
| name | varchar(20) | YES | true | NULL | |
| uid | int | YES | true | NULL | |
| last_access | datetime | YES | true | NULL | |
| age | int | YES | false | NULL | |
| phone | varchar(16) | YES | false | NULL | |
| credits | double | YES | false | NULL | |
+-------------+-------------+------+-------+---------+-------+
6 rows in set (0.00 sec) -
Если sort key указан в таблице с использованием
ORDER BY, Prefix индекс формируется на основе sort key. Если sort key не указан с использованиемORDER BY, Prefix индекс формируется на основе Key колонок.