it-swarm.com.de

Was zählt COUNT (1) eigentlich?

Mögliches Duplikat:
Was ist der Unterschied zwischen Auswahlanzahl (*) und Auswahlanzahl (any_non_null_column)?

Ich habe gehört, dass allgemein gesagt wird, dass Sie beim Zählen der Anzahl der Zeilen in einer Abfrage keine COUNT(*) ausführen sollten, sondern eine indizierte Spalte.

Ich habe gesehen, dass DBAs beim Zählen der Anzahl der Zeilen SELECT COUNT(1) FROM table; ausführen.

Was ist der 1 in der Abfrage?

Ich habe versucht, andere Zahlen (2, 0, -1) einzugeben, und das Ergebnis ist immer das gleiche wie bei Verwendung von 1.

Ist dies nur eine Verknüpfung, anstatt eine bestimmte zu zählende Spalte aufzulisten?

Gibt es Leistungsunterschiede bei der Verwendung einer Konstanten gegenüber der Auflistung eines Spaltennamens?

Ich verwende derzeit MySQl 5.1.60.

8
Patrick

wenn Sie count (*), count (1) oder count ("test") eingeben, erhalten Sie das gleiche Ergebnis, da mysql die Anzahl der Zeilen zählt, zum Beispiel:

select count(fieldname) from table;

zeigt das gleiche Ergebnis an wie

select count(*) from table;

oder

select count(1) from table

mysql> select * from language;
+-------------+----------+---------------------+
| language_id | name     | last_update         |
+-------------+----------+---------------------+
|           1 | English  | 2006-02-15 05:02:19 |
|           2 | Italian  | 2006-02-15 05:02:19 |
|           3 | Japanese | 2006-02-15 05:02:19 |
|           4 | Mandarin | 2006-02-15 05:02:19 |
|           5 | French   | 2006-02-15 05:02:19 |
|           6 | German   | 2006-02-15 05:02:19 |
+-------------+----------+---------------------+
6 rows in set (0.00 sec)

mysql> select 1 from language;
+---+
| 1 |
+---+
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
+---+
6 rows in set (0.00 sec)

mysql> select 'anything'from language;
+----------+
| anything |
+----------+
| anything |
| anything |
| anything |
| anything |
| anything |
| anything |
+----------+
6 rows in set (0.00 sec)

mysql> select count(1), count(*), count('anything') from language;
+----------+----------+-------------------+
| count(1) | count(*) | count('anything') |
+----------+----------+-------------------+
|        6 |        6 |                 6 |
+----------+----------+-------------------+
1 row in set (0.00 sec)

das Ergebnis ist eine Zahl, die der Anzahl der Zeilen dieser Tabelle entspricht.

BITTE BEACHTEN SIE, DASS NULLFELDER NICHT GEZÄHLT WERDEN ....

mysql> select original_language_id from film where original_language_id is null;
+----------------------+
| original_language_id |
+----------------------+
|                 NULL |
|                 NULL |
|                 NULL |
|                 NULL |
|                 NULL |
|                 NULL |
|                 NULL |
......
|                 NULL |
+----------------------+
1000 rows in set (0.00 sec)

mysql> select count(original_language_id) from film where original_language_id is null;
+-----------------------------+
| count(original_language_id) |
+-----------------------------+
|                           0 |
+-----------------------------+
1 row in set (0.00 sec)

Aus diesem Grund, wenn Sie Zeilen zählen möchten, denke ich, dass zählen (etwas) eine gute Option ist

mysql> SELECT COUNT(1) FROM film;
+----------+
| COUNT(1) |
+----------+
|     1000 |
+----------+
1 row in set (0.00 sec)
8
jcho360