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

mysql count query optimieren

Wenn mysql 11 Millionen Zeilen zählen muss, gibt es wirklich keine Möglichkeit, eine einfache Zählung zu beschleunigen. Zumindest nicht, um es auf eine Geschwindigkeit unter 1 Sekunde zu bringen. Sie sollten Ihre Zählweise überdenken. Ein paar Ideen:

  1. Fügen Sie der Tabelle ein Auto-Increment-Feld hinzu. Es sieht so aus, als würden Sie nicht aus der Tabelle löschen, also können Sie einfache Mathematik verwenden, um die Anzahl der Datensätze zu ermitteln. Wählen Sie die minimale automatische Inkrementnummer für das erste frühere Datum und die maximale für das spätere Datum und subtrahieren Sie sie voneinander, um die Datensatzanzahl zu erhalten. Zum Beispiel:

    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. Erstellen Sie eine weitere Tabelle, die die Datensatzanzahl für jeden Tag zusammenfasst. Dann können Sie diese Tabelle nach den Gesamtdatensätzen abfragen. Es gäbe nur 365 Datensätze für jedes Jahr. Wenn Sie genauere Zeiten benötigen, fragen Sie die Übersichtstabelle nach ganzen Tagen und die aktuelle Tabelle nur nach der Anzahl der Datensätze für die Start- und Endtage ab. Fügen Sie sie dann alle zusammen.

Wenn sich die Daten nicht ändern, was anscheinend nicht der Fall ist, lassen sich Übersichtstabellen einfach pflegen und aktualisieren. Sie werden die Dinge erheblich beschleunigen.