검색결과 리스트
글
테이블 크기를 얻는 쿼리 작성
DB를 정리할 때 간단한 쿼리를 이용하여 테이블 크기와 라인수를 알아볼 수 있는 쿼리가 필요한 경우가 있다.
호환성 뷰인 sys.sysindexes, sys.sysobjects 를 이용하면 간단한데
호환성 뷰는 지금까지 릴리즈에 사용되었던 여러 시스템 테이블을 뷰 집합으로 구현된 것이다. 메타데이터를 표시하는 시스템 뷰 컬렉션 중 하나이다.
각각의 테이블은 여러 칼럼을 포함하고 있지만 기능 구현에 필요한 간단한 칼럼만 알아보면 된다.
sys.sysindexes
- 현재 데이터 베이스 내의 각 인덱스 및 테이블마다 한 행을 포함한다.
칼럼 |
형식 |
설명 |
id |
int |
인덱스가 속한 테이블의 ID |
indid |
smallint |
인덱스의 ID 0 = 힙 1 = 클러스터형 인덱스 >1 = 비클러스터형 인덱스 |
reserved |
int |
indid = 0 또는 indid = 1인 경우 reserved는 모든 인덱스 및 테이블 데이터에 할당된 페이지 수 행 오버플로가 발생할 경우 정확한 결과가 반환되지 않는다 |
sys.sysobjects
- 데이터 베이스에서 만들어진 각 개체 (제약 조건, 기본값, 로그, 규칙, 저장 프로시저) 당 한 개의 행을 포함한다.
칼럼 |
형식 |
설명 |
name |
sysname |
개체 이름 |
id |
int |
개체 ID |
xtype |
char(2) |
개체 유형 U = 사용자 테이블 기타 등등.. 아주 많다. |
데이터 베이스가 포함한 테이블 크기 알아보기
SELECT
CONVERT(VARCHAR(30), MIN(o.name)) AS t_name
, LTRIM(STR(SUM(reserved) * 8192.0 / 1024.0, 15, 0) + ' KB') AS t_size
FROM sysindexes i
INNER JOIN sysobjects o
ON o.id = i.id
WHERE i.indid IN (0, 1)
AND o.xtype = 'U'
GROUP BY i.id
ORDER BY SUM(reserved) * 8192.0 / 1024.0 DESC
코드에서 reserved 에 8192 를 곱한 이유는 mssql의 페이지 크기가 8KB 이기 때문이다.
데이터 베이스가 포함한 테이블 라인 수 알아보기
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
RECENT COMMENT