2009-11-17 12 views
11

Ich habe zwei Möglichkeiten beim Schreiben einer SQL-Anweisung mit der COUNT-Funktion.Leistung der COUNT SQL-Funktion

  1. SELECT COUNT(*) FROM <table_name>
  2. SELECT COUNT(some_column_name) FROM <table_name>

In Bezug auf Leistung, was ist die beste SQL-Anweisung? Kann ich mit der Option 1 einen Leistungsgewinn erzielen?

+0

SQL Server? MySQL? – gbn

+0

Ich benutze MS SQL Server 2005 –

Antwort

20

Leistung sollte keine Rolle spielen, weil sie zwei verschiedene Aggregate

  • COUNT(*) sind alle Zeilen, einschließlich NULLs
  • COUNT(some_column_name) schließt NULL in "some_column_name"

Siehe "Count(*) vs Count(1)" Frage für mehr

+2

Sie unterscheiden sich nicht im Falle von Primärschlüsseln oder Nicht-Null-Spalten. – Borys

+0

@Borys: Sie erhalten die gleiche Anzahl. Aber der Primärschlüssel wird einen Index = besser haben. Die Spalte "not null column" darf nicht. Natürlich ist es vielleicht egal, aber normalerweise wird es das tun – gbn

2

Nein, es gibt keine Leistungssteigerung in Sql Server.

4

Option 2 zählt tatsächlich alle Felder, in denen some_column_name nicht null ist. Option 1 zählt alle Felder, in denen ein Feld nicht null ist. Sie könnten also tatsächlich unterschiedliche Ergebnisse aus diesen beiden Abfragen erhalten. Die meiste Zeit Sie eigentlich wollen alle Zeilen zählen und dann die schnellste Option, die für eines der Felder nicht überprüfen, ist einfach SELECT COUNT(1) FROM ...

+1

Sehen Sie dies für COUNT (*) vs COUNT (1) http://StackOverflow.com/Questions/1221559/ – gbn

+0

Count (*) zählt auch alle Zeilen, nicht nur Zeilen, wo ein Wert ist nicht null. Und in Bezug auf die Leistung sind Count (*) und Count (1) identisch, da der Abfrageoptimierer erkennt, was Sie zu tun versuchen, und den gleichen Ausführungsplan generiert. –