sql >> Databasteknik >  >> RDS >> Mysql

optimera mysql count-fråga

Om mysql måste räkna 11 miljoner rader, finns det verkligen inte mycket av ett sätt att snabba upp en enkel räkning. Åtminstone inte för att få den till en hastighet på under 1 sekund. Du bör tänka om hur du gör din räkning. Några idéer:

  1. Lägg till ett fält för automatisk ökning i tabellen. Det verkar som att du inte skulle ta bort från tabellen, så du kan använda enkel matematik för att hitta rekordantalet. Välj det minsta automatiska ökningstalet för det första tidigare datumet och maxtalet för det senare datumet och subtrahera det ena från det andra för att få postantalet. Till exempel:

    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);`
    
  2. Skapa en annan tabell som sammanfattar rekordantalet för varje dag. Sedan kan du fråga den tabellen för det totala antalet poster. Det skulle bara finnas 365 rekord för varje år. Om du behöver komma ner till mer finkorniga tider, fråga i sammanfattningstabellen för hela dagar och den aktuella tabellen för bara postantalet för start- och slutdagarna. Lägg sedan till dem alla tillsammans.

Om data inte förändras, vilket det inte verkar som det är, kommer sammanfattningstabeller att vara lätta att underhålla och uppdatera. De kommer att påskynda saker och ting avsevärt.



  1. Refererar till yttre frågetabeller i en underfråga

  2. Vilka är de 10 bästa funktionerna i Microsoft Access?

  3. PHP:Visa ja/nej bekräftelsedialog

  4. Undersöker ett ORA 028513 DG4ODBC-fel