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

MySQL:Hurtigste måde at tælle antal rækker på

Når du COUNT(*) det tager tælle kolonneindekser ind, så det vil være det bedste resultat. Mysql med MyISAM motoren gemmer faktisk rækkeantal, den tæller ikke alle rækker hver gang du prøver at tælle alle rækker. (baseret på primærnøgles kolonne)

At bruge PHP til at tælle rækker er ikke særlig smart, for du skal sende data fra mysql til php. Hvorfor gøre det, når du kan opnå det samme på mysql-siden?

Hvis COUNT(*) er langsom, bør du køre EXPLAIN på forespørgslen, og tjek om indekser virkelig bruges, og hvor skal de tilføjes.

Følgende er ikke den hurtigste måde, men der er et tilfælde, hvor COUNT(*) passer ikke rigtig - når du begynder at gruppere resultater, kan du løbe ind i et problem, hvor COUNT tæller ikke rigtig alle rækker.

Løsningen er SQL_CALC_FOUND_ROWS . Dette bruges normalt, når du vælger rækker, men stadig har brug for at kende det samlede antal rækker (f.eks. til sidesøgning). Når du vælger datarækker, skal du blot tilføje SQL_CALC_FOUND_ROWS søgeord efter SELECT:

SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;

Når du har valgt de nødvendige rækker, kan du få optællingen med denne enkelte forespørgsel:

SELECT FOUND_ROWS();

FOUND_ROWS() skal kaldes umiddelbart efter datavalgsforespørgslen.

Afslutningsvis kommer alt faktisk ned på, hvor mange poster du har, og hvad der står i WHERE-erklæringen. Du bør virkelig være opmærksom på, hvordan indekser bliver brugt, når der er mange rækker (ti tusinder, millioner og opefter).



  1. Dårlig standby

  2. Hvordan sletter man mysql-rækken efter tiden er gået?

  3. Hent rækken, som har Max-værdien for en kolonne

  4. Hvor meget størrelse Null-værdi tager i SQL Server