Um índice é uma estrutura de dados separada e ordenada (uma B-tree no InnoDB) que permite ao MySQL encontrar linhas sem varrer a tabela inteira. Sem ele, uma busca lê cada linha (um full table scan); com ele, percorre uma árvore em poucos passos.
Primária vs secundária
No InnoDB, a própria tabela é o índice da primary key — um clustered index. As linhas são armazenadas fisicamente em ordem de primary key, então a busca pela primary key aterrissa diretamente na linha completa.
