MS-SQL에서 테이블별 사이즈 및 ROW를 구하는 쿼리입니다.
MSSQL 테이블별 size 및 row 구하기
가. 테이블 size 구하는 쿼리문
SELECT
table_name = convert(varchar(30), min(o.name)), table_size = ltrim(str(sum
(reserved) * 8192 / 1024.,15,0) + 'KB')
FROM sysindexes i
INNER JOIN sysobjects o on (o.id = i.id)
WHERE i.indid in (0, 1, 255)
and o.xtype = 'U'
GROUP BY i.id
order by table_size desc
(큰사이즈의 테이블로 인한 오버플로우 오류 발생시 수식 부분을 수정하셔야
합니다.)
나. 테이블별 row 구하는 쿼리문
SELECT
o.name
, i.rows
FROM sysindexes i
INNER JOIN sysobjects o ON i.id = o.id
WHERE i.indid < 2
AND o.xtype = 'U'
ORDER BY i.rows desc
다.둘다 궁하는 쿼리문은
SELECT Schema_name(tbl.schema_id) AS [Schema],
tbl.name,
Coalesce((SELECT pr.name
FROM sys.database_principals pr WITH (nolock)
WHERE pr.principal_id = tbl.principal_id),
Schema_name(tbl.schema_id)) AS [Owner],
tbl.max_column_id_used AS [Columns],
CAST(CASE idx.index_id
WHEN 1 THEN 1
ELSE 0
END AS BIT) AS
[HasClusIdx],
Coalesce((SELECT SUM (spart.ROWS)
FROM sys.partitions spart WITH (nolock)
WHERE spart.object_id = tbl.object_id
AND spart.index_id < 2), 0) AS [RowCount],
Coalesce((SELECT CAST(v.low / 1024.0 AS FLOAT) * SUM(a.used_pages - CASE
WHEN a.TYPE <> 1 THEN a.used_pages
WHEN p.index_id < 2 THEN a.data_pages
ELSE 0
END)
FROM sys.indexes AS i WITH (nolock)
JOIN sys.partitions AS p WITH (nolock)
ON p.object_id = i.object_id
AND p.index_id = i.index_id
JOIN sys.allocation_units AS a WITH (nolock)
ON a.container_id = p.partition_id
WHERE i.object_id = tbl.object_id), 0.0) / 1024 AS [IndexMB],
Coalesce((SELECT CAST(v.low / 1024.0 AS FLOAT) * SUM(CASE
WHEN a.TYPE <> 1 THEN a.used_pages
WHEN p.index_id < 2 THEN a.data_pages
ELSE 0
END)
FROM sys.indexes AS i WITH (nolock)
JOIN sys.partitions AS p WITH (nolock)
ON p.object_id = i.object_id
AND p.index_id = i.index_id
JOIN sys.allocation_units AS a WITH (nolock)
ON a.container_id = p.partition_id
WHERE i.object_id = tbl.object_id), 0.0) / 1024 AS [DataMB],
tbl.create_date,
tbl.modify_date
FROM sys.tables AS tbl WITH (nolock)
INNER JOIN sys.indexes AS idx WITH (nolock)
ON ( idx.object_id = tbl.object_id
AND idx.index_id < 2 )
INNER JOIN MASTER.dbo.spt_values v WITH (nolock)
ON ( v.NUMBER = 1
AND v.TYPE = 'E' )
--WHERE tbl.Name like '%tablename%'
ORDER BY 8 DESC
'it관련 자료 > MS-SQL 및 데이타베이스' 카테고리의 다른 글
강남kt Idc방문하다 (0) | 2016.02.21 |
---|---|
MS-SQL 데이타 베이스백업 받기 (0) | 2016.02.04 |
저장프로시져 디버깅 (0) | 2010.08.18 |
ms-sql2000 을 ms-sql2005로 복원 하기 (0) | 2010.07.01 |
MSSQL 필드명 추가하는 쿼리 (0) | 2010.01.26 |