Eu tenho uma tabela com um UNIQUE
índice de várias colunas em _job_id__
e __keyword_id__
.
Também precisaria adicionar outro índice __job_id__
se eu tiver uma consulta frequente que execute uma GROUP BY
nessa coluna?
(em 100 milhões de linhas, pode demorar um pouco. É por isso que estou perguntando, em vez de apenas fazer)
Respostas:
Não, de jeito nenhum !!! O MySQL Query Optimizer fará a coisa certa se as colunas principais necessárias estiverem mais à esquerda no índice. Se você criou esse índice, o MySQL Query Optimizer pode optar por nunca usar esse índice se você sempre executar GROUP BY job_id, keyword_id. O MySQL Query Optimizer pode ou não usar o índice se você coletar registros apenas por job_id, mas você tem um índice redundante desperdiçando espaço de qualquer maneira.
Se a tabela for MyISAM, a criação de um índice desse tipo aumentaria o tamanho do arquivo MYI.
Se a tabela for InnoDB e innodb_file_per_table for 0, criar um índice como esse iria inchar o ibdata1.
Se a tabela for InnoDB e innodb_file_per_table for 1, criar um índice desse tipo apenas inchará o arquivo .ibd da tabela.
Em resumo, você não precisa criar esse índice adicional !!!
fonte
Os índices podem acelerar as
group by
operações apenas reduzindo a classificação - isso será mais eficiente se o índice usado for o índice em cluster ou pelo menos tiver a mesma coluna principal que o índice em cluster. Em tudo isso, estou assumindo que o MySQL não tem equivalente de umahash group by
operação que normalmente ignoraria qualquer benefício dos índices - talvez alguém possa confirmar isso.Há um benefício marginal em ter um índice separado ao
job_id
assumir que essa é a única coluna dagroup by
cláusula e nem o índice clusterizado: o índice será menor e, portanto, a varredura gerará menos E / S--EDITAR--
Como um índice contém todos os campos de chave primária definidos para a chave de índice em cluster que não estão no índice secundário , um índice
job_id
ativado será menor que um índicejob_id, keyword_id
sekeyword_id
não fizer parte do índice clusterizado.fonte