Se o mysql tiver que contar 11 milhões de linhas, não há realmente uma maneira de acelerar uma contagem simples. Pelo menos não para chegar a uma velocidade inferior a 1 segundo. Você deve repensar como você faz sua contagem. Algumas ideias:
-
Adicione um campo de incremento automático à tabela. Parece que você não excluiria da tabela, então você pode usar matemática simples para encontrar a contagem de registros. Selecione o número de incremento automático mínimo para a data inicial anterior e o número máximo para a última data e subtraia um do outro para obter a contagem de registros. Por exemplo:
SELECT min(incr_id) min_id FROM record_updates WHERE date_updated BETWEEN '2009-10-11 15:33:22' AND '2009-10-12 23:59:59'; SELECT max(incr_id) max_id FROM record_updates WHERE date_updated > DATE_SUB(NOW(), INTERVAL 2 DAY);`
-
Crie outra tabela resumindo a contagem de registros para cada dia. Em seguida, você pode consultar essa tabela para obter o total de registros. Haveria apenas 365 registros para cada ano. Se você precisar chegar a tempos mais refinados, consulte a tabela de resumo para dias completos e a tabela atual apenas para a contagem de registros para os dias inicial e final. Em seguida, adicione-os todos juntos.
Se os dados não estão mudando, o que não parece estar, então as tabelas de resumo serão fáceis de manter e atualizar. Eles vão acelerar significativamente as coisas.