본문 바로가기

CS 기초/데이터베이스3

[성능 개선] 데이터베이스 튜닝의 시작, 인덱스 활용하기 데이터베이스의 성능을 향상시키기 위한 자료구조인 인덱스는 테이블의 특정 컬럼으로 생성된다. 이 때 카디널리티와 선택률은 어떤 컬럼에 대해 인덱스를 작성할 것인지 기준이 되는 지표이다. 1) 카디널리티가 높을수록 카디널리티란 값의 균형을 나타내는 개념이다. 모든 레코드에 다른 값이 들어가 있는 유일 키 컬럼인 경우 카디널리티가 높아 인덱스로 생성하기 적절하다고 판단한다. 반대로 모든 레코드에 같은 값이 들어가 있다면 카디널리티가 낮은 컬럼이다. 가령 데이터 타입이 Boolean인 컬럼을 기준으로 인덱싱을 한다면 모든 값이 TRUE OR FALSE라 인덱싱의 효율이 떨어진다. 이름, 아이디, 주소같은 데이터가 높은 카디널리티를 갖는다. 2) 선택률이 낮을수록 선택률은 특정 컬럼 값을 지정했을 때 테이블 전체.. 2023. 5. 24.
[성능 개선] 결합을 지배하는 자가 성능을 지배한다 결합 알고리즘은 결합의 성능을 결정하고 SQL 전체의 성능을 좌우하는 요인으로, 옵티마이저가 어떤 알고리즘을 선택할지 여부는 데이터 크기 또는 결합 키의 분산이라는 요인에 의존한다. Nested Loop Nested Loop는 중첩 반복을 사용하는 알고리즘이다. 1) Nested Loop의 작동 ① outer loop: 결합 대상 테이블(구동 테이블)에서 레코드를 하나씩 반복해가며 스캔한다. ② inter loop: 구동 테이블의 레코드 마다 내부 테이블의 레코드를 하나씩 스캔해서 결합 조건에 맞으면 리턴한다. ③ 이러한 작동을 구동 테이블의 모든 레코드에 대해 반복한다. 2) Nested Loops의 특징 Nested Loops의 실행 시간은 레코드 수에 비례한다. (접근 대상 레코드 수 = R(A) .. 2023. 5. 21.
[성능 개선] 데이터베이스의 성능을 좌우하는 쿼리 평가 엔진과 버퍼 매니저 DBMS 아키텍쳐 개요 쿼리 평가 엔진 쿼리 평가 엔진은 사용자로부터 입력받은 SQL 구문을 분석하고, 어떤 순서로 기억장치의 데이터에 접근할지를 결정하는데 이 때 결정되는 계획을 '실행 계획'이라고 한다. 이러한 실행 계획에 기반을 둬서 데이터에 접근하는 방법이 '접근 메서드'이다. 한마디로 쿼리 평가 엔진은 계획을 세우고 실행하는 DBMS의 핵심 기능을 담당하는 모듈이다. 실행 계획 실행 계획이 만들어지면 DBMS는 그것을 바탕으로 데이터 접근을 수행한다. 하지만 데이터양이 많은 테이블에 접근하거나 복잡한 SQL 구문을 실행할 경우 옵티마이저가 최적의 실행 계획을 선택하지 못할 수 있다. 이처럼 SQL 구문의 지연이 발생했을 때는 다음 명령어를 통해 실행 계획을 확인한다. DBMS 명령어 Oracle.. 2023. 5. 18.