본문 바로가기

DBMS

[ORACLE] 테이블 레코드(ROW) 수 조회

테이블의 레코드(ROW) 수를 조회할 때 USER_TABLES 테이블을 사용하는 방법이 보통이다.

 

SELECT TABLE_NAME, NUM_ROWS FROM USER_TABLES;

 

그런데 실제 건수와 차이가 있어 확인해보니 USER_TABLES의 NUM_ROWS는 통계정보 건수를 나타내는 것으로, 마지막 통계 수집 후 변경된 건수를 알 수 없다.

그렇기 때문에 테이블이 업데이트되지 않으면 NUM_ROWS를 사용하여 테이블의 행 수를 정확히 알아낼 수 있지만 추가/삭제를 하는 경우는 정확하지 않을 수 있다. 

USER_TAB_MODIFICATIONS 테이블에서 변경된 레코드 수만을 조회할 수 있어서 USER_TABLES의 NUM_ROWS와 USER_TAB_MODIFICATIONS의 (INSERTS-DELETES)를 더하여 구하는 방법도 있다.

하지만 시스템 테이블보다는 직접 테이블의 행 수를 실제로 계산하는 것이 더 좋으므로 SELECT COUNT(*) 문을 서브쿼리로 사용하도록 바꿨다!