У меня есть таблица действий. он составляет около 1 миллиона записей. его столбцы отключены,
id (PK), u_id (FK), cl_id (FK), activity_log
По умолчанию id (PK) индексируется, и я создал свой собственный индекс для u_id и cl_id, используя,
ALTER TABLE activities ADD INDEX(u_id,cl_id);
Теперь я хотел бы создать многоуровневую индексацию для cl_id (FK) или id (PK) или для обоих столбцов, если это возможно. Как создать многоуровневый индекс с помощью запроса?
Как узнать колонку с многоуровневым индексированием в таблице? я пробовал этот запрос, но он показывает только индексированный столбец,
SHOW indexes FROM activities;
Является ли многоуровневый индекс и некластеризованный индекс одинаковыми?
Я понятия не имею, что такое "многоуровневый" индекс. Но есть "составные" индексы, такие как
INDEX(last_name, first_name)
что очень полезно для
WHERE last_name = 'James'
AND first_name = 'Rick'
или даже
WHERE last_name = 'James'
AND first_name LIKE 'R%'
В MySQL (особенно InnoDB) PRIMARY KEY
всегда является уникальным индексом, и он "кластеризуется" с данными. То есть поиск PK очень эффективен. Структура всегда BTree.
"Вторичные ключи" также являются BTrees, но листовой узел содержит PK. Итак, для завершения запроса необходим второй поиск. (Это различие редко ничего не стоит.)
PK и/или вторичные ключи могут быть "составными".
Объявление FOREIGN KEY
добавляет вторичный индекс, если еще нет подходящего (PRIMARY
или вторичного) индекса, который начинается с столбца в FK.
Ниже приведен избыток, и его следует избегать:
PRIMARY KEY(id),
INDEX(id) -- DROP this
Индексированный последовательный
Ой! Я не слышал об этом устаревшем методе индексации почти за два десятилетия.
Вопрос дает ссылку на определение "многоуровневого" индексации. Бегите от него! Измените школы. Или, по крайней мере, понять, что ИС больше не считается жизнеспособным.
Для большинства индексирования MySQL использует "BTrees". Это было изобретено несколько десятилетий назад и существенно уничтожено Indexed Sequential. И, в значительной степени, уничтожил Хешинг как метод индексирования на диске.
MySQL BTrees может обрабатывать несколько столбцов, как в моем примере, выше.