MySQL покрывает оптимизацию индекса?

У меня есть таблица со следующей структурой ниже:

Id (Int), Telephone_Number (Int), Name (VARCHAR), Address (VARCHAR)

Я хочу создать покрывающий индекс для этого запроса SELECT:

SELECT Id FROM mytable WHERE Telephone_Number = '55442233'; 

Я понимаю, что закрывающие индексы удаляют объем дискового ввода-вывода, поскольку индексы хранятся в кеше памяти, что увеличивает производительность.

Что касается моего запроса SELECT, правильно ли я говорю, что создание индекса Id не устранит необходимость в дисковом вводе-выводе из-за предложения WHERE, требующего доступа к значению Telephone_Number?

Если да, будет ли составной индекс (Id, Telephone_Number) работать как индекс покрытия? Или индекс покрытия должен состоять из одного столбца?


person Babra Cunningham    schedule 08.11.2016    source источник
comment
Я думаю, вам также следует проверить, что такое Index, потому что они повышают производительность, потому что они создали b-дерево, ускоряющее поиск. Не имеет ничего общего с кешем памяти.   -  person Juan Carlos Oropeza    schedule 08.11.2016
comment
Столбцы в вашем индексе необходимо перевернуть. Похоже, вам не хватает некоторых основ индексирования. Возможно, вы захотите прочитать мою (бесплатную онлайн) книгу по индексированию: use-the -index-luke.com/sql/table-of-contents - Покрывающие индексы объясняются в главе 5 при сканировании только индекса раздела.   -  person Markus Winand    schedule 08.11.2016
comment
Возможно, вам понравится моя презентация Как действительно создавать индексы, и видео здесь: youtube.com/watch?v=ELR7-RdU9XU   -  person Bill Karwin    schedule 09.11.2016
comment
Индексные блоки кэшируются в ОЗУ, как и блоки данных. Они не хранятся в ОЗУ. Нужный вам индекс покрытия находится в обратном порядке: INDEX(telephone_number, id). Поваренная книга   -  person Rick James    schedule 13.11.2016