본문 바로가기

IT & AI/AI 지식

SQL 최적화 인덱스, 분산 데이터베이스, 그리고 PL/SQL

by 빛나는해커 2024. 12. 2.

안녕하세요! 오늘은 데이터베이스 관리에서 중요한 개념인 인덱스, PL/SQL, 그리고 분산 데이터베이스에 대해 정리해보았습니다. 

지난 글에 이어 SQL 성능 최적화의 중요한 요소인 인덱스, 데이터베이스 내의 복잡한 로직 처리를 가능하게 하는 PL/SQL, 그리고 물리적으로 분리된 데이터베이스를 제어하는 분산 데이터베이스에 대해 다뤄보았습니다.
데이터베이스의 성능을 극대화하고 보다 효율적인 데이터 관리와 처리에 대해 조금이나마 이해할 수 있었으면 좋겠습니다.

1. 인덱스란 무엇인가?

인덱스는 데이터베이스에서 데이터의 색인 역할을 한다. 책의 목차처럼, 원하는 데이터를 빠르게 찾기 위해 사용된다. 인덱스를 사용하면 대량의 데이터를 보다 효율적으로 조회할 수 있지만, 올바르게 사용해야 성능을 유지할 수 있다.

  • 인덱스의 특징:
    • 인덱스 키를 기준으로 정렬되어 있어 탐색이 빨라진다.
    • **Primary Key(기본키)**는 자동으로 인덱스가 생성된다.
    • 하나의 테이블에 여러 개의 인덱스를 생성할 수 있으며, 하나의 인덱스는 여러 컬럼으로 구성될 수 있다.
    • 자주 변화하는 속성을 인덱스로 설정하는 것은 좋지 않다. 데이터 변경이 잦으면 인덱스의 유지 비용이 크기 때문이다.
    • 인덱스를 통한 스캔이 항상 전체 테이블 스캔보다 효율적인 것은 아니다. 특히 랜덤 액세스가 많은 양의 데이터를 처리할 때는 성능 저하가 발생할 수 있다.
    • 인덱스는 VARCHAR, NUMBER, DATE, CHAR 타입의 컬럼에 생성 가능하다.
    • 인덱스의 종류는 다양하며, 다음과 같은 방식들이 있다:
      • 순차 인덱스, 비트맵 인덱스, 결합 인덱스, 클러스터 인덱스, 해시 인덱스 등이 있다.
  • 인덱스의 종류:
    • Index Unique SCAN: 인덱스 키값이 중복되지 않을 때 해당 키를 통해 탐색.
    • Index Range SCAN: 특정 범위를 조회하는 WHERE 문을 사용하여 해당 영역을 스캔.
    • Index Full SCAN: 인덱스의 처음부터 끝까지 모두 스캔하여 데이터를 조회.
  • 인덱스 사용 시 주의점:
    • 자주 업데이트되는 컬럼에 인덱스를 남발하지 말 것: 빈번한 데이터 변경은 인덱스 유지 비용을 높인다.
    • 적절한 인덱스 수 유지: 너무 많은 인덱스는 조회에는 유리할 수 있으나, 데이터 수정, 삭제 시 성능 저하를 초래한다.
    • 복합 인덱스의 적절한 활용: 여러 개의 컬럼을 하나의 인덱스로 사용하는 복합 인덱스는 특정 조회 쿼리에서 큰 성능 이점을 제공할 수 있다. 그러나 쿼리 조건이 복합 인덱스에 맞지 않는다면 오히려 성능 저하의 원인이 될 수 있다.

Tip: 인덱스는 데이터 조회 속도를 높이지만, 삽입, 수정, 삭제 작업 시 성능 저하를 유발할 수 있다. 따라서 인덱스 생성 시 성능에 미치는 영향을 잘 고려해야 한다.


2. PL/SQL: 프로그래밍 기능을 추가한 SQL

PL/SQLSQL을 확장하여 다양한 절차적 프로그래밍을 가능하게 한 언어다. PL/SQL을 사용하면 데이터베이스와 관련된 비즈니스 로직을 데이터베이스 내에서 직접 처리할 수 있어 성능과 일관성을 높일 수 있다.

  • PL/SQL의 특징:
    • Block 구조로 되어 있어 기능별로 모듈화가 가능하다.
    • DECLARE 문으로 시작하여, 변수를 선언하고 사용할 수 있다.
    • DML, IF, LOOP 문 등 다양한 절차적 언어 구조를 사용할 수 있다.
    • 오라클에 내장되어 있어 동일한 언어를 사용하는 프로그램과의 호환성이 뛰어나다.
    • 응용 프로그램의 성능을 향상시키며, 데이터베이스 내의 복잡한 로직을 처리하는 데 매우 유용하다.
    • PL/SQL 언어로 Procedure, User Defined Function, Trigger와 같은 객체를 작성할 수 있다.
    • DECLARE, BEGIN ~ END는 필수이고, EXCEPTION은 선택 사항이다.
    • Procedure 내부의 절차적 코드는 PL/SQL 엔진이 처리하고, 일반적인 SQL 문장은 SQL 실행기가 처리한다.
  • PL/SQL의 장점:
    • 에러 처리를 위한 EXCEPTION 블록 제공: 예외 처리 구문을 통해 오류 발생 시 대응 로직을 작성할 수 있다.
    • 일관성 유지: 비즈니스 로직을 데이터베이스 내부에서 처리하므로, 동일한 로직이 여러 응용 프로그램에서 사용되더라도 일관성을 유지할 수 있다.
    • 반복 작업의 자동화: 루프, 조건문 등을 사용해 반복적인 데이터 처리 작업을 자동화할 수 있어 개발 생산성이 높아진다.

예시:

DECLARE
  v_total NUMBER;
BEGIN
  SELECT COUNT(*) INTO v_total FROM employees WHERE department_id = 10;
  DBMS_OUTPUT.PUT_LINE('총 직원 수: ' || v_total);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('해당 부서에 직원이 없습니다.');
END;

위와 같은 예시로 간단한 PL/SQL 블록을 구성하여 부서별 직원 수를 출력하고, 예외 상황에 대처할 수 있다.


3. 분산 데이터베이스

분산 데이터베이스는 하나의 DBMS가 네트워크를 통해 물리적으로 분리된 데이터베이스들을 제어하는 형태를 말한다. 이는 시스템의 성능과 확장성을 높이며, 보다 나은 데이터 보호와 신뢰성을 제공한다.

  • 분산 데이터베이스의 특징:
    • 성능 향상: 분산 데이터베이스는 병렬로 작업을 수행하여 작업 속도가 빠르다.
    • 모듈화: 모듈화가 되어 있어 시스템의 일부를 수정하거나 갱신하더라도 다른 모듈에 영향을 주지 않는다.
    • 용량 확장 용이: 새로운 분산 데이터베이스를 추가하여 용량을 확장하기 쉽다.
    • 보안과 신뢰성: 중요한 데이터를 물리적으로 분리하여 보호할 수 있으며, 시스템의 신뢰성을 높일 수 있다.
    • 관리의 어려움: 여러 데이터베이스를 분산하여 관리하기 때문에 보안 관리무결성 통제가 복잡하다.
    • 구조 복잡성: 데이터베이스가 물리적으로 분리되어 있어 구조적으로 복잡할 수 있다.
  • 분산 데이터베이스의 활용 예시:
    • 글로벌 기업: 각 지사마다 분리된 데이터베이스를 관리하면서 본사는 모든 데이터를 통합적으로 조회할 수 있다.
    • 백업 및 복구의 효율성: 중요한 데이터는 여러 곳에 분산해 두어 특정 지점의 장애가 전체 시스템에 영향을 주지 않도록 할 수 있다.

Tip: 분산 데이터베이스를 설계할 때는 데이터 일관성동기화 문제를 해결하는 것이 중요하다. 트랜잭션이 분산되어 처리되기 때문에 모든 분산 데이터베이스가 동일한 상태를 유지해야 한다.


혹시 이해가 어려우시다면, 이전 글을 먼저 참고해보시면 좋을 것 같습니다.

 

SQL 활용 GROUP 함수와 테이블 연결 기법

안녕하세요! SQL에서 데이터를 분석하고 활용하는 중요한 방법 중 하나는 다양한 GROUP 함수를 사용하는 것입니다.이번 글에서는 ROLLUP, CUBE, GROUPING SETS와 같은 고급 그룹 함수들을 중심으로 설명

actshiny.com

 

SQL 활용 JOIN과 다양한 결합 방식

안녕하세요! SQL에서 테이블 간의 데이터를 결합하여 분석하는 것은 매우 중요합니다. 데이터베이스에서 여러 테이블을 연결해 필요한 정보를 도출하기 위해 JOIN을 사용하며, 이는 집합 연산과

actshiny.com

 

SQL 활용 서브쿼리(SubQuery), 계층형 조회

안녕하세요! 이번 글은 데이터베이스에서 보다 복잡한 조회를 구현하기 위해 사용하는 두 가지 주요 기법인 서브쿼리(SubQuery)와 계층형 조회에 대해 정리해보았습니다. 무엇보다도 서브쿼리의

actshiny.com

SQL 최적화 인덱스, 분산 데이터베이스, 그리고 PL/SQL 소개 이미지

반응형