Die Systemansicht sys.partitions
enthält eine Spalte "Zeilen", die die Gesamtzahl der Zeilen in einer bestimmten Partition angibt. Für eine Tabelle, die nicht partitioniert ist (oder nur eine Partition aufweist, je nachdem, wie Sie sie betrachten), gibt diese Spalte die Anzahl der Zeilen in der Tabelle an.
Ich bin gespannt, wie genau diese Spalte ist und ob ich sie anstelle einer verwenden kann SELECT COUNT(1) FROM TableName
. Ich habe einige Experimente durchgeführt, bei denen eine Tabelle erstellt und ein paar tausend Zeilen hinzugefügt, ein paar hundert gelöscht, ein paar tausend weitere hinzugefügt usw. und die Zählung war schon immer beendet. Ich habe jedoch eine Tabelle mit etwa 700 mil Zeilen und mehreren Indizes. Die Zeile sys.partitions
für den Clustered-Index ist wieder leer, die anderen Indizes weisen jedoch leichte Abweichungen auf (+ -20.000).
Weiß jemand, wie diese Zeile berechnet wird und ob sie so genau ist, wie sie angezeigt wird?
quelle
Antworten:
Die Onlinedokumentation gibt an, dass das Feld "Zeilen" die ungefähre Anzahl der Zeilen in dieser Partition angibt . Ich würde daher davon ausgehen, dass es zu 100% nahe, aber nicht zu 100% genau ist.
Michael Zilberstein berichtet von einem Beispiel
sys.partitions
, in dem For want of a nail wild inkorrekt war . Nicht zu sagen, dass es ein weit verbreitetes Ereignis ist, aber es ist möglich.sys.dm_db_index_physical_stats
enthält einrecord_count
Feld, das genauer zu sein scheint. Beachten Sie jedoch, dass das Ausführen des DMV möglicherweise zu einem REDO-Blockierungsproblem führt, wenn Sie es auf einer Instanz ausführen, die ein AlwaysOn Readable Secondary Replica hostet.Die Erklärung für das
record_count
Feld zeigt die folgenden Informationen:Siehe auch die Antwort von Martin Smith auf eine ähnliche Frage zum Stapelüberlauf.
quelle