sql >> Database teknologi >  >> RDS >> Mysql

optimer mysql tælleforespørgsel

Hvis mysql skal tælle 11M rækker, er der virkelig ikke meget af en måde at fremskynde en simpel optælling. I hvert fald ikke for at få den til en hastighed på under 1 sekund. Du bør genoverveje, hvordan du tæller. Et par ideer:

  1. Tilføj et automatisk stigningsfelt til tabellen. Det ser ud til, at du ikke ville slette fra tabellen, så du kan bruge simpel matematik til at finde rekordantallet. Vælg tallet for min automatiske stigning for den oprindelige tidligere dato og maks. for den sidstnævnte dato, og træk den ene fra den anden for at få registreringsantallet. For eksempel:

    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. Opret en anden tabel, der opsummerer rekordantallet for hver dag. Derefter kan du forespørge i den tabel for de samlede poster. Der ville kun være 365 poster for hvert år. Hvis du har brug for at komme ned til mere finkornede tider, skal du forespørge i oversigtstabellen for hele dage og den aktuelle tabel for kun at se rekordantal for start- og slutdagene. Tilføj derefter dem alle sammen.

Hvis dataene ikke ændrer sig, hvilket det ikke ser ud til at være, så vil oversigtstabeller være nemme at vedligeholde og opdatere. De vil fremskynde tingene betydeligt.



  1. Glidende gennemsnit baseret på tidsstempler i PostgreSQL

  2. Hvordan kan jeg bruge en forespørgsel med pladsholder inde i anførselstegn? (perl / postgresql)

  3. MySQL Vælg dato svarende til i dag

  4. Sådan kalder du MySQL Stored Procedure i Python