Para um exemplo de tabela rowstore...
CREATE TABLE T(Id INT PRIMARY KEY, C1 INT NULL, C2 INT NULL);
Existem vários métodos diferentes para recuperar contagens de linhas de tabela de metadados no SQL Server - como o abaixo
SELECT SUM(rows)
FROM sys.partitions
WHERE object_id = object_id('dbo.T') AND index_id <= 1;
SELECT SUM(row_count)
FROM sys.dm_db_partition_stats
WHERE object_id = object_id('dbo.T') AND index_id <= 1;
SELECT SUM(rows)
FROM sys.sysindexes
WHERE id = object_id('dbo.T') AND indid <= 1;
SELECT OBJECTPROPERTYEX(object_id('dbo.T'), 'Cardinality')
Os planos de execução aparentemente mostram uma variedade de objetos diferentes sendo usados - como o abaixo.
- sysrowsets OUTER APPLY OpenRowset(TABLE ALUCOUNT
- sysidxstats CROSS APPLY OpenRowSet(TABELA PARTITIONCOUNTS
- sysidxstats i CROSS APPLY OpenRowSet(TABLE INDEXPROP
O que está acontecendo aqui? O SQL Server realmente mantém esses metadados em vários lugares? Se sim, qual é o método mais confiável?