Ich möchte auf schnelle Weise die Anzahl der Zeilen in meiner Tabelle mit mehreren Millionen Zeilen zählen. Ich fand den Beitrag " MySQL: Schnellster Weg, um die Anzahl der Zeilen zu zählen " in Stack Overflow, der anscheinend mein Problem lösen würde. Bayuah lieferte diese Antwort:
SELECT
table_rows "Rows Count"
FROM
information_schema.tables
WHERE
table_name="Table_Name"
AND
table_schema="Database_Name";
Was mir gefallen hat, weil es aussieht wie ein Lookup anstelle eines Scans, also sollte es schnell gehen, aber ich habe mich entschlossen, es zu testen
SELECT COUNT(*) FROM table
um zu sehen, wie groß der Leistungsunterschied war.
Leider erhalte ich unterschiedliche Antworten, wie unten gezeigt:
Frage
Warum unterscheiden sich die Antworten um ungefähr 2 Millionen Zeilen? Ich vermute, dass die Abfrage, mit der ein vollständiger Tabellenscan durchgeführt wird, die genauere Nummer ist. Gibt es jedoch eine Möglichkeit, die richtige Nummer zu ermitteln, ohne diese langsame Abfrage ausführen zu müssen?
Ich lief ANALYZE TABLE data_302
, was in 0,05 Sekunden abgeschlossen ist. Wenn ich die Abfrage erneut ausführe, erhalte ich jetzt ein viel genaueres Ergebnis von 34384599 Zeilen, aber es ist immer noch nicht dieselbe Nummer wie select count(*)
bei 34906061 Zeilen. Gibt die Analysetabelle sofort zurück und wird im Hintergrund verarbeitet? Ich denke, es ist erwähnenswert, dass dies eine Testdatenbank ist und derzeit nicht geschrieben wird.
Es wird niemanden interessieren, ob es nur darum geht, jemandem zu sagen, wie groß eine Tabelle ist, aber ich wollte die Zeilenzahl an einen Code übergeben, der diese Zahl verwendet, um "gleich große" asynchrone Abfragen zum Abfragen der Datenbank zu erstellen Parallel dazu, ähnlich der in Erhöhen der langsamen Abfrageleistung mit der parallelen Abfrageausführung von Alexander Rubin gezeigten Methode . So wie es ist, werde ich nur die höchste ID mit bekommen SELECT id from table_name order by id DESC limit 1
und hoffe, dass meine Tabellen nicht zu fragmentiert werden.
NUM_ROWS
Spalte