Tenho uma tabela no MySQL com 500 mil registros e nesta tabela possuo o campo data (date) onde alguns selects da minha aplicação utiliza o campo data como filtro para retornar informações que preciso recuperar.
Exemplo:
"select * from cadastro where data < DATE_SUB(NOW() , INTERVAL 10 DAY;)"
Como o campo data é um filtro no meu SELECT é necessário utilizar um índice INDEX no campo data? (pois já vi posts falando que todo campo que é utilizado como filtro deve ter um índice).
A segunda dúvida é a seguinte, eu tenho outra tabela que tem 200 mil registros, porem nesta tabela eu não utilizo o campo data (date) como filtro nos SELECT, mas na hora da exibição dos dados desta tabela eu ordeno os resultados pela data de forma decrescente (ORDER BY data DESC), neste caso também é necessário utilizar um índice INDEX no campo data para ajudar no desempenho na hora do ORDER BY?
Pode colocar sim tanto para pergunta 1 e 2, que existe sim uma otimização principalmente na ordenação, mas, todavia é bom lembrar que existe outros fatores para ter desempenho, exemplo, nunca traga essa massa de dados se realmente não for necessário, também não tem ambiente para tudo isso 500 mil ou 200 mil registros é muita coisa e trazer isso de forma explicita pode lhe causar mau desempenho mesmo tendo índices, etc … ou seja, a massa de informação conta no desempenho e fatores de conexão, de quantidade de acessos, e ai a gente vai qualificando quantas coisas podem causar lentidão.
Resumindo é surreal trazer200 mil registros (e/ou 500 então pior ainda)
Meu conselho mais garantido é que você dê uma estudada no comando Explain do Mysql.
Com ele você entenderá se suas queries estão sendo beneficiadas pela existência de um índice ou não.
Os bancos de dados costumam mudar a forma de executar uma query de acordo com vários fatores: quantidade de dados, que colunas estão sendo retornadas, estatísticas, etc. Portanto é sempre melhor medir a realidade do que seguir conselhos genéricos do tipo (sempre criar um índice para colunas X).