03.03.2019

SQL: быстрый подсчет количества записей в таблицах

Периодически встречается ситуация, когда нужно посчитать количество записей в очень больших таблицах, содержащих миллионы и более записей. При этом стандартная функция 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'))

Комментариев нет:

Отправить комментарий