Se mysql deve contare 11 milioni di righe, non c'è davvero molto modo per accelerare un conteggio semplice. Almeno per non portarlo a una velocità inferiore a 1 secondo. Dovresti ripensare a come fai il tuo conteggio. Alcune idee:
-
Aggiungi un campo di incremento automatico alla tabella. Sembra che non elimineresti dalla tabella, quindi puoi usare la matematica semplice per trovare il conteggio dei record. Selezionare il numero di incremento automatico minimo per la data precedente iniziale e il numero massimo per l'ultima data e sottrarre uno dall'altro per ottenere il conteggio dei record. Ad esempio:
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);`
-
Crea un'altra tabella che riepiloga il conteggio dei record per ogni giorno. Quindi puoi interrogare quella tabella per i record totali. Ci sarebbero solo 365 record per ogni anno. Se è necessario scendere a tempi più dettagliati, interrogare la tabella di riepilogo per i giorni interi e la tabella corrente solo per il conteggio dei record per i giorni di inizio e di fine. Quindi aggiungili tutti insieme.
Se i dati non cambiano, cosa che non sembra, le tabelle di riepilogo saranno facili da mantenere e aggiornare. Accelereranno notevolmente le cose.