[SQLite] ANALYZE
SQLite의 ANALYZE
명령은 테이블과 인덱스에 대한 통계를 수집하고, 이 정보를 데이터베이스의
sqlite_stat1
테이블에 저장합니다.
통계 테이블의 내용은 SELECT를 사용하여 쿼리할 수 있으며 DELETE , INSERT 및 UPDATE 명령을 사용하여 변경할 수 있습니다.
쿼리 최적화 프로그램은 통계 테이블 내용에 접근하고 사용할 수 있습니다. 이를 통해 쿼리 계획을 개선하는 데 도움을 줄 수 있습니다. 인자 없이 ANALYZE
를 실행하면 모든 연결된 데이터베이스가 분석됩니다. 스키마 이름이 인자로 주어지면 해당 데이터베이스의 모든 테이블과 인덱스가 분석됩니다. 테이블 이름이나 인덱스 이름이 인자로 주어지면 해당 테이블이나 인덱스만 분석됩니다.
ANALYZE;
이 명령은 데이터베이스의 모든 테이블과 인덱스에 대한 통계를 수집합니다.
ANALYZE myTable;
이 명령은 myTable
테이블과 그와 관련된 인덱스에 대한 통계만을 수집합니다.
ANALYZE
는 쿼리 성능을 향상시키기 위해 데이터베이스의 내용이나 스키마가 크게 변경된 후에 실행하는 것이 좋습니다. 이를 통해 최적화 프로그램이 더 나은 쿼리 계획을 수립할 수 있는 유용한 정보를 얻을 수 있습니다.
대략적인 ANALYZE
PRAGMA analysis_limit
명령을 사용하여 ANALYZE
에 의한 스캔 양을 제한할 수 있어, 대규모 데이터베이스에서도 ANALYZE
를 빠르게 실행할 수 있습니다. 이를 "대략적인 ANALYZE"라고 합니다.
PRAGMA analysis_limit=1000;
이 명령은 ANALYZE
가 인덱스의 전체 스캔을 시작하지만, 방문한 행 수가 1000(또는 다른 제한 값)에 도달하면 스캔을 중단하기 시작합니다.
최적화
복잡한 쿼리를 사용하는 장기 실행 데이터베이스를 가진 애플리케이션은 데이터베이스 연결을 닫기 직전에 다음 명령어를 실행하는 것을 고려해야 합니다:
PRAGMA optimize;
PRAGMA optimize
는 일반적으로 아무 작업도 수행하지 않지만, 쿼리 계획에 도움이 될 것으로 판단되면 ANALYZE
를 실행할 수 있습니다. PRAGMA analysis_limit
는 PRAGMA optimize
에 의해 실행되는 ANALYZE
명령의 범위를 제한하여 CPU 사이클을 과도하게 소모하지 않도록 합니다.