모든 테이블 인덱스 크기 조회하는 쿼리를 정리합니다.
# 쿼리
SELECT
s.name AS SchemaName,
t.name AS TableName,
i.name AS IndexName,
p.rows AS TableRows,
SUM(a.total_pages) * 8 AS 'TotalSize(KB)',
SUM(a.used_pages) * 8 AS 'UsedPages(KB)',
SUM(a.data_pages) * 8 AS 'DataPages(KB)',
i.type_desc AS IndexType,
i.is_unique AS 유니크여부
FROM
sys.indexes i
INNER JOIN sys.tables t ON i.object_id = t.object_id
INNER JOIN sys.schemas s ON t.schema_id = s.schema_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.is_ms_shipped = 0 and i.index_id != 0
GROUP BY s.name, t.name, i.name, i.type_desc, i.is_unique, p.rows
ORDER BY SchemaName asc
# 각 조인 시스템 테이블 설명
- sys.indexes: 인덱스에 대한 정보를 제공합니다.
- sys.tables: 데이터베이스의 모든 테이블 정보를 저장
- sys.schemas: 데이터베이스의 모든 스키마 정보를 저장
- sys.partitions: 테이블과 인덱스의 파티션 정보를 저장
- sys.allocation_units: 데이터베이스 객체의 실제 물리적 저장소 할당 정보를 저장
# 테이블의 조인 관계
sys.indexes ─┐
├─ object_id ─── sys.tables ─── schema_id ─── sys.schemas
│
├─ object_id, index_id ─── sys.partitions
│ │
└─────────────────── partition_id ─── sys.allocation_units
'♣ Learning Logs > MSSQL' 카테고리의 다른 글
[MSSQL] 프로파일러 설정 (0) | 2024.10.25 |
---|---|
[MSSQL] 시스템 스키마 (0) | 2024.10.25 |
[MSSQL] 트랜잭션 로그 시점 복원(.trn) (0) | 2024.10.03 |
[MSSQL] DB 파일 사이즈 관리하기 (0) | 2024.09.25 |
[MSSQL] 유용한 트랜잭션 롤백 옵션: SET XACT_ABORT ON (1) | 2024.09.25 |