본문 바로가기
DB/MSSQL (SQLSERVER)

[MSSQL] 스키마 별 전체 행수(ROW)수 구하기 - COUNT

by 커져라불어라 2020. 7. 13.
반응형

안녕하세요 투자하는 개발자 투개자입니다.

MSSQL 내 시스템 테이블을 통해 행수를 구하는 쿼리를 알아보겠습니다.


데이터 베이스를 관리하다 보면 원하는 테이블의 ROW COUNT가 필요한 상황이 많습니다.

보통은 SELECT문으로 COUNT를 구하지만, 만약 50개 100개의 테이블 행수가 필요한 상황이라면 어떻게 해야할까요?

SELECT COUNT(*) FROM [스키마명].[테이블명]으로 하나하나 쿼리를 작성하실 건가요?

이와같은 상황에서 필요한 것이 시스템 테이블입니다.


sys라는 스키마로 사용되는 해당 테이블은 SQL_SERVER에서 지원되는 시스템 테이블입니다. 이를 활용해서 원하는 스키마 내 테이블 행수(ROW COUNT)를 한번에 조회할 수 있는 쿼리를 작성 할 수 있습니다.


우선 어떻게 작성하는지 확인한 후 하나한 의미를 파악해 보겠습니다.



SELECT 
    SC.NAME +'.'+ TB.NAME AS TABLE_NAME
    , SUM(PA.ROWS) AS ROW_COUNT
FROM sys.tables AS TB
INNER JOIN sys.partitions AS PA ON PA.OBJECT_ID = TB.OBJECT_ID
INNER JOIN sys.schemas AS SC ON TB.schema_id = SC.schema_id
WHERE 1=1
AND TB.is_ms_shipped = 0 
AND PA.index_id IN (1,0
AND SC.name = '[스키마이름]'
GROUP BY SC.name,TB.name
ORDER BY SUM(PA.rows) DESC

cs



해당 쿼리는 [스키마이름]에 조회하고 싶은 스키마 이름을 입력한 후 조회하면 해당 스키마 속에 해당되는 테이블들의 행수가 조회됩니다.

이 쿼리는 시스템테이블의 tables, partitions, schemas의 데이터를 조인하고 조건절을 활용하여 개발했습니다.


1. sys.tables

sys.tables 데이터 베이스 내 테이블의 내용을 조회할 수 있는 시스템테이블입니다.

테이블이름, 타입, 스키마(키), 생성날짜, 널값, 컬럼갯수 등에 대한 정보입니다. 중요한것은 OBJECT_ID를 통해 여러 테이블과 조인할 수 있는 점입니다.


2. sys.partitions

sys.partitions는 말그래도 파티션으로 나누어진 테이블들의 정보입니다.

해당 테이블에서 테이블들의 ROW수를 구할 수 있습니다.


3.sys.schemas

sys.schemas는 데이터 베이스 내 존재하는 스키마들의 정보를 조회할 수 있습니다.


오늘은 3가지 시스템 테이블을 활용해 스키마별 ROW수를 조회하는 쿼리를 작성해 보았습니다.

원한다면 해당 시스템 테이블과 다양한 시스템테이블를 통해 반복작업을 편하게 조회하고 활용할 수 있는 쿼리를 개발할 수 있으니 우리 블로그 구독자님들도 다양한 시스템 테이블로 효율적으로 업무에 사용하시기 바랍니다.


감사합니다.


반응형