Antworten:
Das bedeutet , COUNT(any_non_null_column)
die gleiche wie geben COUNT(*)
natürlich , weil es keine NULL - Werte sind Unterschiede zu verursachen.
Im Allgemeinen COUNT(*)
sollte es besser sein, da jeder Index verwendet werden kann, da er COUNT(column_or_expression)
möglicherweise nicht indiziert oder SARGable ist
Aus ANSI-92 (suchen Sie nach " Scalar expressions 125
")
Fall:
a) Wenn COUNT (*) angegeben ist, ist das Ergebnis die Kardinalität von T.
b) Ansonsten sei TX die einspaltige Tabelle, die das Ergebnis der Anwendung des <Werteausdrucks> auf jede Zeile von T und der Eliminierung von Nullwerten ist. Wenn ein oder mehrere Nullwerte beseitigt werden, wird eine Beendigungsbedingung ausgelöst: Warnung - Nullwert beseitigt in eingestellter Funktion.
Die gleichen Regeln gelten zumindest auch für SQL Server und Sybase
Hinweis: COUNT (1) ist dasselbe wie COUNT (*), da 1 ein nicht nullwertfähiger Ausdruck ist.
COUNT(*)
, COUNT(<constant>)
und COUNT(<column name>)
dass allen drei das Präfix ALL
oder vorangestellt werden könnte DISTINCT
(standardmäßig, ALL
wenn weggelassen). Ich frage mich nur, welcher Ausdruck verwendet werden kann, wo Sie sagen _or_expression
?
COUNT(1)
als unbrauchbares Beispiel, ist es das gleiche wie COUNT(*)
. COUNT(CASE WHEN a>b THEN 1 END)
Als Beispiel für die Zählung von Zeilen mit a> b.
In jeder neueren (dh 8.x + ) Version von Oracle machen sie dasselbe . Mit anderen Worten, der einzige Unterschied ist die Semantik:
select count(*) from any_table
ist leicht lesbar und offensichtlich, was Sie zu tun versuchen, und
select count(any_non_null_column) from any_table
ist schwerer zu lesen, weil
any_non_null_column
wirklich so durchgesetzt wirdnot null
Kurz gesagt, verwenden Siecount(*)
In einer neueren Version gibt es in der Tat keinen Unterschied zwischen count (*) und count ( keine Nicht-Null-Spalte ), wobei not null hervorzuheben ist :-) Habe dieses Thema übrigens mit einem Blog-Beitrag behandelt: Ist count (col) besser als count? (*)?
Im Handbuch Oracle8i Certified Professional - Handbuch zur DBA-Zertifizierungsprüfung (ISBN 0072130601) , Seite 78, heißt es, dass COUNT (1) tatsächlich schneller ausgeführt wird als COUNT (*), da bestimmte Mechanismen zum Überprüfen des Datenwörterbuchs auf die Nullbarkeit jeder Spalte (oder) aufgerufen werden mindestens die erste Spalte mit Nichtnullierbarkeit) bei Verwendung von COUNT (*) . COUNT (1) umgeht diese Mechanismen.
MySQL-Cheats für 'SELECT COUNT (1) on tblname;' auf MyISAM-Tabellen, indem Sie den Tabellenkopf für die Tabellenzahl lesen. InnoDB zählt jedes Mal.
Um zu testen, ob COUNT (1) datenbankunabhängig schneller als COUNT (*) ausgeführt wird, führen Sie einfach Folgendes aus und beurteilen Sie die Laufzeit selbst:
SELECT COUNT(1) FROM tblname WHERE 1 = 1;
SELECT COUNT(*) FROM tblname WHERE 1 = 1;
SELECT COUNT(column-name) FROM tblname WHERE 1 = 1;
Dadurch wird die COUNT-Funktion unabhängig von der Speicher-Engine oder dem RDBMS auf dem gleichen Niveau ausgeführt.
count(*)
verwendet.