Eu tenho uma tabela mysql. Esta tabela tem apenas três colunas. Dois são varchar (5) e um é varchar (32). Haverá apenas uma consulta executada na tabela.
Selecione (coluna 1),(coluna 2) da minha tabela onde a coluna 3= xxxxx
A tabela será eliminada uma vez por mês e recriada com novos dados. Fora isso, esta tabela será somente leitura e consultada apenas com a consulta acima.
A coluna usada na consulta não é exclusiva ou nula. Presumo que adicionaria um índice regular a essa coluna. Haveria algum benefício em adicionar índices às outras 2 colunas?
O número máximo de linhas seria de cerca de 5.000
Além disso, qual mecanismo de mesa seria melhor?
Se você resolvê-lo adicionando um índice secundário, imho MyISAM ou InnoDB não importará muito, pois ambos usam índices B-Tree.
Anexe as duas colunas adicionais ao índice:
(col3, col1, col2)
ou(col3, col2, col1)
deve se comportar da mesma forma para sua consulta.O motivo para adicionar todas as colunas é que esse índice abrange sua consulta - todos os dados necessários para resolver a consulta estão contidos no índice, portanto, não é necessário ler as linhas reais da tabela. Isso significa que os dados que você deseja buscar são agrupados no disco (o índice é ordenado/agrupado por
col3
) e nenhuma leitura aleatória na tabela "principal" é necessária.Se você tivesse apenas o índice ativado
(col3)
, cada linha poderia ser armazenada em uma parte diferente da tabela (dependendo de sua chave primária ou ordem de inserções) e iria pular aleatoriamente por todo o lugar, incorrendo em penalidade de E/S.Se você não tiver chave primária, MyISAM provavelmente seria melhor, pois o InnoDB criaria uma chave primária interna e a tabela ocuparia mais espaço do que o necessário.
Mas existe a possibilidade de resolvê-lo sem usar nenhuma chave secundária. Use a tabela InnoDB como
Dessa forma, a tabela usará o recurso InnoDB de agrupamento por chave primária - efetivamente forçando a ordem ideal e o agrupamento de linhas descrito anteriormente. E levará apenas um pouco mais de espaço para a coluna adicional (apenas 2 bytes, se você for positivo, sempre haverá menos de 60k linhas) e uma chave secundária muito menor para acomodar o
auto_increment
comportamento em vez de efetivamente ter 2 cópias da tabela como na outra versão.Exemplo: http://sqlfiddle.com/#!9/c36cfc/2