2013-08-23 14 views
9

Um Anzahl der Zeilen im Ergebnis zu erhalten gesetzt gibt es zwei Möglichkeiten:Mit count (*) vs num_rows

  1. Ist Abfrage zu verwenden

    $query="Select count(*) as count from some_table where type='t1'";

    und dann das Abrufen zu bekommen zählen Wert der Zählung.

  2. Erhalte die Zählung über num_rows(), in php.

also welches ist besser leistungs weise?

+18

Wenn Ihre Tabelle, sagen wir, eine Million Zeilen hat und Sie 'num_rows()' in PHP verwenden, um sie zu zählen, dann müssen Sie eine Million Zeilen von der Datenbank an PHP übergeben. Wenn Sie in der Datenbank "count (*)" verwenden, übergeben Sie eine Zeile an PHP. – andrewsi

+0

@andrewsi Was sind die Leistungsunterschiede?Ich meine, 'COUNT (*)' muss auch die Zeilen zählen, nur auf dem DB-Server. – Itay

+1

@andrewsi, warum nicht eine Antwort hinterlassen? –

Antwort

6

Wenn Sie die Zeilen tatsächlich zählen möchten, verwenden Sie COUNT(*). num_rows wird normalerweise (nach meiner Erfahrung) nur verwendet, um zu bestätigen, dass mehr als null Zeilen zurückgegeben wurden, und in diesem Fall weitermachen. Es wird wahrscheinlich länger dauern, bis MySQL viele ausgewählte Zeilen im Vergleich zur Aggregation auf COUNT auslesen kann, auch wenn die Abfrage selbst die gleiche Zeit benötigt.

2

Die Zählung ist sowohl leistungsmäßig als auch speichertechnisch sehr viel effizienter, da Sie nicht so viele Daten vom Datenbankserver abrufen müssen. Wenn Sie mit einer einzelnen Spalte rechnen, z. B. mit einer eindeutigen ID, können Sie sie effizienter gestalten.

0

num_rows() wäre besser, wenn Sie kleine Menge von Zeilen haben und count(*) Ihnen Leistung geben wird, wenn es eine große Anzahl von Zeilen gibt und Sie eine auswählen und an php senden müssen.

1

Es hängt von Ihrer Implementierung ab. Wenn Sie mit vielen Zeilen arbeiten, ist count (*) besser, da nicht alle diese Zeilen an PHP übergeben werden müssen. Wenn Sie andererseits mit einer kleinen Anzahl von Zeilen arbeiten, ist der Unterschied vernachlässigbar.

2

Es gibt einige Unterschiede zwischen den beiden:

  1. num_rows ist die Anzahl der Ergebniszeilen (Datensätze) übermittelt.
  2. count(*) ist die Anzahl der Datensätze in der Datenbank, die der Abfrage entsprechen. Wenn die Grenze niedriger ist als die Anzahl der passenden Datensätzen in Wert abweichen kann, ist

Die Datenbank kann die Anzahl der zurückgegebenen Ergebnisse (MySQL erlaubt dies zum Beispiel) zu begrenzen, so konfiguriert werden, wobei in diesem Fall die beiden. Beachten Sie, dass die Grenzwerte vom DBA konfiguriert werden können. Aus dem SQL-Abfragecode selbst kann daher nicht ersichtlich sein, welche Grenzwerte gelten.

Die Verwendung von num_rows zum Zählen von Datensätzen bedeutet, dass jeder Datensatz "übertragen" wird. Wenn Sie also nur eine Gesamtanzahl haben wollen (das wäre ein einzelner Datensatz/Zeile), ist die count stattdessen besser.

Zusätzlich kann count in komplexeren Abfrageszenarien verwendet werden, um Dinge wie Zwischensummen zu erledigen, was mit num_rows nicht einfach ist.