Si mysql doit compter 11 millions de lignes, il n'y a vraiment pas beaucoup de moyen d'accélérer un simple comptage. Au moins pour ne pas l'amener à une vitesse inférieure à 1 seconde. Vous devriez repenser votre façon de compter. Quelques idées :
-
Ajoutez un champ d'incrémentation automatique à la table. Il semble que vous ne supprimeriez pas de la table, vous pouvez donc utiliser des calculs simples pour trouver le nombre d'enregistrements. Sélectionnez le numéro d'incrément automatique minimum pour la date initiale antérieure et le maximum pour la dernière date et soustrayez l'un de l'autre pour obtenir le nombre d'enregistrements. Par exemple :
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);`
-
Créez un autre tableau résumant le nombre d'enregistrements pour chaque jour. Ensuite, vous pouvez interroger cette table pour le nombre total d'enregistrements. Il n'y aurait que 365 enregistrements pour chaque année. Si vous avez besoin d'obtenir des heures plus précises, interrogez le tableau récapitulatif pour les jours complets et le tableau actuel uniquement pour le nombre d'enregistrements pour les jours de début et de fin. Ensuite, ajoutez-les tous ensemble.
Si les données ne changent pas, ce qui ne semble pas être le cas, les tableaux récapitulatifs seront faciles à gérer et à mettre à jour. Ils accéléreront considérablement les choses.