개발(프로그래밍)/SQL(RDBMS)

[MSSQL] 특정 테이블의 전체 행수 가져오기(Row count)

Serge 2020. 4. 5. 15:59
1
2
3
4
select  si.id, si.rows, si.*
from    sysindexes si
where   and si.indid < 2 -- indexid = 0 : 힙, indexid = 1 : 클러스터 
and     si.id = OBJECT_ID('dbo.tbl_sample');
cs

 

개발 중 내가 모르는 테이블의 데이터를 파악해야 할 때가 있다.

데이터 파악을 위해 조회를 해야 하는데, 전체 레코드 수가 억 단위로 넘어가는 테이블이라면

대충날린 내 쿼리 하나에 서버 부하가 일어날 수도 있는 법이다.

   ... 애초에 이정도 규모라면 모니터링 되고 있겠지만

 

아무튼 나는 처음 보는 테이블이 있다면 항상 테이블의 행수(Row)부터 확인한다.

 

sysindexes에 대해 정확하게 아는 게 아니라는 점이 가장 큰 맹점인데...

 

sysindexes는 DB 데이터 변화에 따라 시스템에서 실시간 업데이트 하는 Index일 것이며,

sysindexes 관련 데이터가 변경되는 과정에서 위 쿼리를 실행했을 때는

정확한 행의 수를 못받을 수도 있을 것 같다는 예상을 조심스럽게 해본다.

어차피 정확한 건수가 필요한 게 아니라, 테이블의 데이터가 많냐 적냐를 확인하기 위한 쿼리기 때문에

원래 목적에는 부합하는 쿼리이다.

 

대상 테이블은 20건의 데이터가 있음
그래도 클러스터 인덱스가 생성되어 있는 테이블이기 때문에, 다른 컬럼을 count해도 index scan을 탄다.
일단 sysindexes를 활용하여 20건의 데이터가 들어있는 테이블임을 확인했다.

https://docs.microsoft.com/ko-kr/sql/relational-databases/system-compatibility-views/sys-sysindexes-transact-sql?view=sql-server-ver15

 

sys.debug (Transact-sql) - SQL Server

sys.sysindexes(Transact-SQL)sys.sysindexes (Transact-SQL) 이 문서의 내용 --> 적용 대상: SQL Server Azure SQL Database Azure Synapse Analytics(SQL DW) 병렬 데이터 웨어하우스 APPLIES TO: SQL Server Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse 현재 데

docs.microsoft.com

sysindexes에 대한 MS 공식 레퍼런스 문서