Периодически встречается ситуация, когда нужно посчитать количество записей в очень больших таблицах, содержащих миллионы и более записей. При этом стандартная функция COUNT(*) для них отрабатывает крайне долго, даже при использовании грязного чтения (WITH (NOLOCK)). В рамках T-SQL есть несколько трюков, которые не всегда точны, но позволяют быстро оценить количество записей, что может быть полезно при последующей оптимизации запросов.
Способ №1:
SELECT SUM(row_count) FROM sys.dm_db_partition_stats WHERE object_id=OBJECT_ID('tblYourTableName') AND (index_id=0 or index_id=1)
Способ №2:
SELECT CONVERT(bigint, rows) FROM sysindexes WHERE id = OBJECT_ID('tblYourTableName') AND indid < 2
Способ №3:
SELECT CAST(p.rows AS float) FROM sys.tables AS tbl INNER JOIN sys.indexes AS idx ON idx.object_id = tbl.object_id and idx.index_id < 2 INNER JOIN sys.partitions AS p ON p.object_id=CAST(tbl.object_id AS int) AND p.index_id=idx.index_id WHERE ((tbl.name=N'tblYourTableName' AND SCHEMA_NAME(tbl.schema_id)='dbo'))
Комментариев нет:
Отправить комментарий