对于行存储表的示例...
CREATE TABLE T(Id INT PRIMARY KEY, C1 INT NULL, C2 INT NULL);
有多种不同的方法可以从 SQL Server 中的元数据中检索表行数 - 例如以下方法
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')
执行计划显然显示了正在使用的各种不同对象 - 例如下面的。
- sysrowsets OUTER APPLY OpenRowset(TABLE ALUCOUNT
- sysidxstats 交叉应用 OpenRowSet(表分区计数
- sysidxstats i 交叉应用 OpenRowSet(TABLE INDEXPROP
这是怎么回事?SQL Server 真的在多个地方维护这些元数据吗?如果是这样,哪种方法最可靠?