sql >> Databasteknik >  >> RDS >> Mysql

SELECT COUNT(*) är långsam, även med where-sats

InnoDB använder klustrade primärnycklar, så primärnyckeln lagras tillsammans med raden på datasidorna, inte på separata indexsidor. För att göra en räckviddsskanning måste du fortfarande skanna igenom alla potentiellt breda rader på datasidor; Observera att den här tabellen innehåller en TEXT-kolumn.

Två saker jag skulle prova:

  1. kör optimize table . Detta kommer att säkerställa att datasidorna fysiskt lagras i sorterad ordning. Detta skulle möjligen kunna påskynda en intervallsökning på en klustrad primärnyckel.
  2. skapa ytterligare ett icke-primärt index på bara kolumnen change_event_id. Detta kommer att lagra en kopia av den kolumnen på indexsidor som är mycket snabbare att skanna. När du har skapat den, kontrollera förklara planen för att se till att den använder det nya indexet.

(du vill förmodligen också göra kolumnen change_event_id stor osignerad om den ökar från noll)



  1. MySQL-utlösare före Insert value Checking

  2. SQL-fel:Fel syntax nära nyckelordet "Användare"

  3. När ska man använda Common Table Expression (CTE)

  4. Hur man använder index efficienty i mysql-fråga