Der Unterschied und die Ausführungsmethode von select count() und select count(1)

Der Unterschied und die Ausführungsmethode von select count() und select count(1)

Count(*) oder Count(1) oder Count([column]) sind möglicherweise die am häufigsten verwendeten Aggregatfunktionen in SQL Server. Tatsächlich können viele Menschen diese drei nicht unterscheiden. In diesem Artikel werden die Funktionen, Beziehungen und Prinzipien hinter diesen drei erläutert.

Ich habe in der Vergangenheit oft einige sogenannte Optimierungsvorschläge gesehen, die Count(1) anstelle von Count(*) verwenden, um die Leistung zu verbessern. Als Grund wird angegeben, dass Count(*) zu einem vollständigen Tabellenscan führt. Es macht eigentlich keinen Unterschied, wie Sie „Count“ schreiben.

Count(1) und Count(*) bedeuten eigentlich, dass der Ausdruck in Count() ausgewertet wird, um zu sehen, ob er NULL ist. Wenn er NULL ist, wird er nicht gezählt, wenn er aber nicht NULL ist, wird er gezählt. Beispielsweise wird, wie in Code 1 gezeigt, NULL in Count angegeben (der Optimierer erlaubt nicht, dass NULL explizit angegeben wird, daher muss es einer Variablen zugewiesen werden, um es anzugeben).

DECLARE @xx INT
SET @xx=NULL
Wählen Sie ANZAHL(@xx) AUS [AdventureWorks2012].[Sales].[SalesOrderHeader]

Codeauflistung 1. In Count ist NULL angegeben. Da alle Zeilen NULL sind, wird das Ergebnis überhaupt nicht gezählt. Offensichtlich ist das Ergebnis 0.

Wenn Sie also Count(*) oder Count(1) oder Count('anything') angeben, ist das Ergebnis dasselbe, da keiner dieser Werte NULL ist, wie in der folgenden Abbildung gezeigt.

Solange Sie in Count einen Ausdruck ungleich NULL angeben, ändert sich das Ergebnis nicht.

Wenn wir nur die Ergebnisse betrachten, Select Count(*) und Select Count(1) die gleichen Ergebnisse zurück.

Wenn die Tabelle keinen Primärschlüssel hat, ist count(1) schneller als count(*). Wenn die Tabelle einen Primärschlüssel hat, ist count(Primärschlüssel) am schnellsten, wenn der Primärschlüssel als Zählbedingung verwendet wird.

Wenn Ihre Tabelle nur ein Feld hat, ist count(*) am schnellsten.

Die Ergebnisse von count(*) und count(1) sind identisch, beide enthalten NULL-Statistiken, während count(column) keine NULL-Statistiken enthält.

1. Der Unterschied zwischen select 1 und select *

Wähle eine Konstante aus ... Für alle Zeilen wird immer nur ein Wert zurückgegeben, die Konstante. Daher wird es normalerweise nur verwendet, um zu bestimmen, ob es existiert oder nicht (wie etwa die exists-Klausel). Select * from ... gibt alle Spalten aller Zeilen zurück.

Der Leistungsunterschied hängt von Ihren From- und Where-Klauseln ab. Wenn Ihre Where-Bedingung beispielsweise indiziert werden kann, ist die Leistung von „select 1 from ...“ offensichtlich besser als die von „select * from ...“.

2. Verwendung von select sum(1)

select count(*) gibt die Anzahl der Datensätze zurück, die die Bedingungen erfüllen. Dies ist dasselbe wie select sum(1).

An sum() kann jedoch jede beliebige Zahl übergeben werden, auch negative Zahlen und Gleitkommazahlen, und der zurückgegebene Wert ist der übergebene Wert n * die Anzahl der Datensätze, die die Bedingung m erfüllen.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Zusammenfassung der Unterschiede zwischen count(*), count(1) und count(col) in MySQL
  • Unterschiede und Ausführungsmethoden von Select count(*), Count(1) und Count(column)
  • Der Unterschied und die Ausführungsmethode von Select count(*) und Count(1) in SQL Server
  • Detaillierte Erklärung der Ausführungsunterschiede zwischen count(1), count(*) und count(Spaltenname)

<<:  Vue3 + el-table realisiert Zeilen- und Spaltenkonvertierung

>>:  Detaillierte Erläuterung der Nginx-Standortkonfiguration (Standortübereinstimmungsreihenfolge)

Artikel empfehlen

So installieren Sie MySQL 8.0 und melden sich bei MySQL unter MacOS an

Folgen Sie dem offiziellen Tutorial, laden Sie da...

Beispiel für die Wertübertragung in einem HTML-Formular über die Get-Methode

Die google.html-Schnittstelle ist wie in der Abbil...

Die perfekte Lösung zum Hervorheben von Schlüsselwörtern in HTML

Bei der Arbeit an einem Projekt bin ich kürzlich ...

HTML-Hyperlink ein Tag_Powernode Java Academy

Jeder, der HTML studiert oder verwendet hat, soll...

Analyse des Prinzips des dynamischen Proxys des Mybatis-Mappers

Vorwort Bevor wir mit der Erklärung des Prinzips ...

11 Gründe, warum Bootstrap so beliebt ist

Vorwort Bootstrap, das beliebteste Front-End-Entw...

Spezifische Verwendung interner temporärer MySQL-Tabellen

Inhaltsverzeichnis UNION Tabelleninitialisierung ...

Beispiele für MySQL-Batch-Hinzufügungs- und Speichermethoden

Beim Anmelden am Stresstest sind viele verschiede...

Detaillierte Erklärung des VueRouter-Routings

Inhaltsverzeichnis Vue-Router 1. Verstehen Sie da...

Optimierung der Frontend-Leistung von Websites: JavaScript und CSS

Ich habe einen Artikel des Yahoo-Teams über die O...

Tomcat verwendet Log4j zur Ausgabe des catalina.out-Protokolls

Das Standardprotokoll von Tomcat verwendet java.u...

Warum der CSS-Attributwert clear:right im Detail nicht funktioniert

Die Verwendung der Clear-Eigenschaft zum Löschen v...

Ein Problem mit der Bereitstellung von MySQL 5.5

MySQL-Bereitstellung Derzeit stellt das Unternehm...