Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql count leistung

Werfen Sie einen Blick auf die folgenden Blogbeiträge:

1) COUNT(***) vs COUNT(col)
2) Einfache MySQL-Leistungstipps
3) Schnelle Zählung(*) für InnoDB

btw, welchen motor verwendest du?

BEARBEITET: Über die Technik, um das Zählen zu beschleunigen, wenn Sie nur wissen müssen, ob es eine gewisse Anzahl von Zeilen gibt. Entschuldigung, war nur falsch mit meiner Anfrage. Wenn Sie also nur wissen müssen, ob es z.B. 300 Zeilen nach bestimmten Bedingungen können Sie die Unterabfrage ausprobieren:

select count(*) FROM
( select 1 FROM _table_ WHERE _conditions_ LIMIT 300 ) AS result

Zuerst minimieren Sie die Ergebnismenge und zählen dann das Ergebnis. Es wird immer noch die Ergebnismenge gescannt, aber Sie können sie einschränken (noch einmal, es funktioniert, wenn die Frage an DB lautet "ist hier mehr oder weniger als 300 Zeilen), und wenn DB mehr als 300 Zeilen enthält, die die Bedingung erfüllen, dass die Abfrage schneller ist

Testergebnisse (meine Tabelle hat 6,7 Millionen Zeilen):

1) SELECT count(*) FROM _table_ WHERE START_DATE > '2011-02-01'
gibt 4,2 Millionen für 65,4 Sekunden zurück

2) SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result
gibt 100 für 0,03 Sekunden zurück

Unten ist das Ergebnis der EXPLAIN-Abfrage, um zu sehen, was dort vor sich geht:

EXPLAIN SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result