Heim >Datenbank >MySQL-Tutorial >Wie kann ich Zeilen in extrem großen Datenbanktabellen effizient zählen?

Wie kann ich Zeilen in extrem großen Datenbanktabellen effizient zählen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-14 17:01:45604Durchsuche

How Can I Efficiently Count Rows in Extremely Large Database Tables?

Strategie zur Optimierung der Statistiken zur Zeilenanzahl großer Tabellen

Das Zählen von Zeilen in großen Datenbanktabellen kann zu Leistungsproblemen führen. Während einige Artikel die Verwendung von SELECT COUNT(*) mit Vorsicht empfehlen, ist die Geschwindigkeit bei Tabellen mit einer großen Anzahl von Zeilen und Spalten immer noch ein Problem. Ziel dieses Artikels ist es, eine datenbankherstellerunabhängige Methode zum genauen Zählen von Zeilen in großen Tabellen zu untersuchen.

Datenbankanbieterunabhängige Lösung

Der einfachste und zuverlässigste Weg ist die Verwendung der Standardfunktion COUNT(*). Moderne Datenbanksysteme optimieren diese Funktion auch für große Tabellen, da sie nur genügend Daten lesen müssen, um die Anzahl der Zeilen zu schätzen. Daher ist COUNT(*) die bevorzugte Option.

SQL Server-Annäherung (außerhalb des Rahmens dieses Artikels)

Obwohl es einige mögliche Annäherungen für SQL Server gibt, gehen diese Methoden über den Rahmen dieses Artikels hinaus.

Andere Hinweise

  • COUNT(1) und COUNT(PrimaryKey) entsprechen in Bezug auf die Zeilenanzahl COUNT(*).
  • Die Verwendung der Tabellenpartitionierung kann COUNT(*) die Leistung bei sehr großen Tabellen verbessern.
  • Wenn die Tabelle häufig aktualisiert wird, ist die Anzahl der aus COUNT(*) erhaltenen Zeilen aufgrund ausstehender Transaktionen möglicherweise nicht ganz korrekt.

SQL Server-Beispiel

Für eine Tabelle mit etwa 1,4 Milliarden Zeilen und 12 Spalten wurde die folgende Abfrage mit COUNT(*) mit dem NOLOCK-Hinweis in 5 Minuten und 46 Sekunden abgeschlossen:

<code class="language-sql">SELECT COUNT(*) FROM MyBigtable WITH (NOLOCK)</code>

Alternativ kann die folgende Abfrage mithilfe der Dynamic Management View (DMV) des Systems in weniger als einer Sekunde abgeschlossen werden:

<code class="language-sql">SELECT
   Total_Rows = SUM(st.row_count)
FROM
   sys.dm_db_partition_stats st
WHERE
    object_name(object_id) = 'MyBigtable' AND (index_id</code>

(Hinweis: Die zweite SQL-Anweisung ist unvollständig und ein Teil des Codes fehlt im Originaltext)

Das obige ist der detaillierte Inhalt vonWie kann ich Zeilen in extrem großen Datenbanktabellen effizient zählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn