MySQL Innodb: большой композитный ПК нет других индексов
Я создаю таблицу Innodb с четырьмя столбцами.
Таблица
column_a (tiny_int)
column_b (medium_int)
column_c (timestamp)
column_d (medium_int)
Primary Key -> column_a, column_b, column_c
С логической точки зрения столбцы A, B, C должны быть объединены в PK. Однако для повышения производительности и возможности чтения непосредственно из индекса (с использованием индекса) я рассматриваю PK, который состоит из всех 4 столбцов (A, B, C, D).
ВОПРОС
Какова будет эффективность добавления дополнительного столбца к первичному ключу в таблице Innodb?
ОТХОДОВ
- Суррогатные первичные ключи абсолютно исключены
- Других индексов в этой таблице не будет
- Таблица интенсивно читает / пишет (оба примерно одинаковы)
Спасибо!
2 ответа
В InnoDB, PRIMARY KEY
Структура индекса включает в себя все неключевые поля и автоматически использует их для покрытия запросов индекса и исключения строк. Не существует отдельной структуры данных, кроме PRIMARY KEY
структура индекса. Нет необходимости добавлять дополнительные поля в PRIMARY KEY
само определение. Обратите внимание, что это не покажет Using index
когда он использует PRIMARY KEY
в таблице InnoDB, потому что это другой путь кода, который не вызывает добавление этого сообщения.
Несколько вещей для рассмотрения:
- Если в рассматриваемом запросе не используются все столбцы индекса, индекс не будет использоваться.
- Как отмечает jeremycole: в структуре Innodb все данные строк хранятся в листовых узлах B-дерева кластерного индекса (ПЕРВИЧНЫЙ ИНДЕКС)
Эта концепция рассматривается: http://www.innodb.com/wp/wp-content/uploads/2009/05/innodb-file-formats-and-source-code-structure.pdf http: //blog.johnjosephbachir. орг /2006/10/22/ все вы-потребность к ноу-о-проектирование-MySQL-InnoDB-первичные клавиши /
... и в блоге Джереми здесь: http://blog.jcole.us/2013/01/07/the-physical-structure-of-innodb-index-pages/
Таким образом, запроса на A, B, C будет достаточно для эффективного получения всех значений в этой таблице Innodb.