Методы определения размера таблицы SQL Server с примерами кода

Чтобы определить размер таблицы в SQL Server, вы можете использовать различные методы. Вот несколько подходов с примерами кода:

Метод 1: использование системной хранимой процедуры sp_spaceused

EXEC sp_spaceused 'YourTableName';

Этот метод возвращает размер таблицы, включая данные, индекс и зарезервированное пространство.

Метод 2. Использование представления динамического управления sys.dm_db_partition_stats

SELECT 
    OBJECT_NAME(object_id) AS TableName, 
    SUM(reserved_page_count) * 8 AS TotalSizeKB
FROM 
    sys.dm_db_partition_stats
WHERE 
    OBJECT_NAME(object_id) = 'YourTableName'
    AND index_id < 2
GROUP BY 
    object_id;

Этот метод определяет размер таблицы в килобайтах путем суммирования зарезервированного пространства для страниц данных и индексных страниц таблицы.

Метод 3. Использование функции динамического управления sys.dm_db_index_physical_stats

SELECT 
    OBJECT_NAME(object_id) AS TableName,
    SUM(used_page_count) * 8 AS TotalSizeKB
FROM 
    sys.dm_db_index_physical_stats (
        DB_ID(),
        OBJECT_ID('YourTableName'),
        NULL,
        NULL,
        'DETAILED'
    )
GROUP BY 
    object_id;

Этот метод вычисляет размер таблицы путем суммирования количества использованных страниц для всех индексов, связанных с таблицей.

Метод 4. Использование системной хранимой процедуры sp_MSforeachtable

EXEC sp_MSforeachtable 'EXEC sp_spaceused [?]'

Этот метод определяет размер всех таблиц в базе данных путем выполнения хранимой процедуры sp_spaceused для каждой таблицы.

Метод 5. Запрос к представлению каталога sys.objects

SELECT 
    t.NAME AS TableName,
    SUM(p.rows) AS RowCounts,
    SUM(a.total_pages) * 8 AS TotalSizeKB
FROM 
    sys.tables t
INNER JOIN 
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
WHERE 
    t.NAME = 'YourTableName'
GROUP BY 
    t.NAME;

Этот метод получает размер таблицы путем объединения различных представлений системного каталога.