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

SELECT COUNT(*) er langsom, selv med where-sætning

InnoDB bruger grupperede primærnøgler, så den primære nøgle gemmes sammen med rækken på datasiderne, ikke på separate indekssider. For at lave en rækkeviddescanning skal du stadig scanne gennem alle de potentielt brede rækker på datasider; Bemærk, at denne tabel indeholder en TEKST-kolonne.

To ting jeg ville prøve:

  1. kør optimize table . Dette vil sikre, at datasiderne fysisk opbevares i sorteret rækkefølge. Dette kunne tænkes at fremskynde en rækkeviddescanning på en klynget primærnøgle.
  2. opret et ekstra ikke-primært indeks på kun kolonnen change_event_id. Dette vil gemme en kopi af den kolonne på indekssider, som er meget hurtigere at scanne. Når du har oprettet den, skal du tjekke forklaringsplanen for at sikre, at den bruger det nye indeks.

(du vil sandsynligvis også gøre kolonnen change_event_id bigint usigneret hvis det stiger fra nul)



  1. Hvordan finder man den gennemsnitlige tidsforskel mellem rækker i en tabel?

  2. Brug af Kubernetes til at implementere PostgreSQL

  3. Skriv et tal med to decimaler SQL Server

  4. MySQL COUNT med LIMIT