Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ist SELECT COUNT(Spalte) schneller/langsamer als SELECT COUNT(*)?

Ich habe ein paar SELECT COUNT(*) FROM MyTable ausprobiert vs. SELECT COUNT(SomeColumn) FROM MyTable mit verschiedenen Tabellengrößen, und wo die SomeColumn Einmal ist es eine Clustering-Schlüsselspalte, einmal ist es in einem nicht gruppierten Index und einmal ist es überhaupt kein Index.

In allen Fällen sehe ich bei allen Tabellengrößen (von 300.000 Zeilen bis 170 Millionen Zeilen) nie einen Unterschied in Bezug auf Geschwindigkeit oder Ausführungsplan - in allen Fällen der COUNT wird durch einen Clustered-Index-Scan gehandhabt --> dh im Grunde wird die gesamte Tabelle gescannt. Wenn es sich um einen nicht geclusterten Index handelt, erfolgt der Scan auf diesem Index – selbst wenn ein SELECT COUNT(*) ausgeführt wird !

Es scheint keinen Unterschied in Bezug auf die Geschwindigkeit oder den Ansatz zu geben, wie diese Dinge gezählt werden - um sie alle zu zählen, muss SQL Server nur die gesamte Tabelle scannen - Punkt.

Die Tests wurden auf SQL Server 2008 R2 Developer Edition durchgeführt