인덱스 리빌드
DB의 쿼리 수행 속도 저하의 문제 중 하나는 쿼리 튜닝이 문제일 수도 있지만, 인덱스의 밸런스가 깨졌을 경우의 가능성도 있다.
인덱스 밸런스가 깨졌다는게 무슨 의미냐 하면,
DB는 ArrayList와 트리를 합쳐 놓은 구조와 비슷한 B+트리 구조인데, 트리 아래의 데이터들이 무작위로 수정되거나 삭제 되었을 경우 트리 구조가 불균형을 이루게 된다.
이런 경우 인덱스를 재구성 해주면 쿼리 수행 속도를 향상 시킬 수 있다.
(물론 튜닝이 잘 된 쿼리를 짜는게 중요하다.)
오라클의 인덱스 재설정 쿼리는 ALTER INDEX 인덱스명 REBUILD;
이고,
인덱스 명을 조회하는 쿼리는 SELECT INDEX_NAME FROM USER_INDEXED;
이다.
그리고 인덱스의 데이터 타입이 LOB이라면 인덱스 리빌드는 불가능 하다.
따라서 이 두 쿼리를 조합하고, 조건을 추가하면 리빌드 하는 쿼리는 다음과 같다.
SELECT 'ALTER INDEX ' || INDEX_NAME || ' REBUILD ;'
FROM USER_INDEXES
WHERE INDEX_TYPE != 'LOB'
;
경험상 CUBRID나 TIBERO 도 동일했던 것 같다.
참고 : https://docs.oracle.com/database/121/SPATL/alter-index-rebuild.htm#SPATL1017
728x90
반응형
'Database' 카테고리의 다른 글
[SQL] 오라클 조회 쿼리 성능 개선을 위한 정리 - 1 (0) | 2023.04.12 |
---|---|
락 걸린 테이블 확인 및 락 해제 (0) | 2022.02.16 |
[DBeaver - cubrid] DBeaver Cubrid UTF-8 문제 (1) | 2020.12.07 |
[SQL] 계층 쿼리 (0) | 2020.10.19 |
[MongoDB] 설치하기 (MacOS) (0) | 2020.05.18 |