[sql] 테이블 통계 최적화

데이터베이스 성능을 최적화하고 쿼리 실행 계획을 향상시키기 위해 테이블 통계를 최적화하는 것은 매우 중요합니다. 테이블 통계는 데이터 분포, 카디널리티, 인덱스 선택 등과 관련된 정보를 제공하므로 데이터베이스 쿼리 옵티마이저가 효율적인 실행 계획을 수립할 수 있게 합니다.

테이블 통계 업데이트 여부 확인

데이터베이스에서 사용되는 테이블들의 통계 정보를 확인하여 최신 상태인지 확인해야 합니다. 대부분의 데이터베이스는 통계 정보의 업데이트 주기를 설정할 수 있으며, 일정 기간 이후 자동으로 업데이트가 수행됩니다. 하지만, 테이블의 데이터 분포나 업데이트 빈도가 높은 경우 수동으로 통계 정보를 업데이트해야 할 수도 있습니다.

Oracle

Oracle 데이터베이스의 경우, 다음과 같은 쿼리를 사용하여 테이블 통계의 업데이트 상태를 확인할 수 있습니다.

SELECT TABLE_NAME, LAST_ANALYZED
FROM USER_TABLES;

위 쿼리를 통해 사용자 테이블의 마지막 통계 업데이트 일자를 확인할 수 있습니다.

SQL Server

SQL Server의 경우, 아래와 같은 쿼리를 사용하여 테이블의 통계 정보를 확인할 수 있습니다.

SELECT Object_Name(Object_ID) AS TableName, 
       STATS_DATE(Object_ID, Index_ID) AS LastStatisticsUpdate
FROM sys.Indexes;

위 쿼리를 통해 테이블의 인덱스 통계 업데이트 일자를 확인할 수 있습니다.

테이블 통계 업데이트

테이블 통계가 오래되었거나 데이터 분포가 크게 변화한 경우, 통계 정보를 업데이트해야 합니다. 테이블 통계를 업데이트하기 위해서는 각 데이터베이스 시스템에 따라 다양한 방법을 사용할 수 있습니다.

Oracle

Oracle에서는 다음과 같이 테이블 통계를 업데이트할 수 있습니다.

EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => 'schema_name', tabname => 'table_name');

위 쿼리를 사용하여 지정한 스키마와 테이블의 통계 정보를 업데이트할 수 있습니다.

SQL Server

SQL Server에서는 다음과 같이 테이블 통계를 업데이트할 수 있습니다.

UPDATE STATISTICS table_name;

위 쿼리를 사용하여 특정 테이블의 통계 정보를 업데이트할 수 있습니다.

정기적인 테이블 통계 업데이트

많은 경우, 정기적으로 테이블 통계를 업데이트하는 작업이 필요합니다. 이를 위해 데이터베이스의 스케줄링 기능을 활용하여 테이블 통계 업데이트 작업을 자동화할 수 있습니다.

데이터베이스 스케줄러를 사용한 테이블 통계 업데이트 작업은 데이터 분포나 업데이트 패턴에 따라 적절한 주기로 설정해야 합니다. 많은 경우, 일정 주기(예: 일주일마다)로 테이블 통계를 업데이트하는 것이 권장됩니다.

참고 자료