모두의 sql - view, optimizer, index

-·2022년 7월 11일
0

VIEW(뷰)

가상 테이블

사용이유

  • 사용자 편의성

    내가 원하는 부분만 쓸수있다

  • 보안

    직접 접근X, 접근 가능한 사람 지정가능

특성

  • 테이블처럼 사용가능
  • 데이터 추출을 위해 SQL문을 매번 작성하지 않아도 됨
  • 조인을 해서 뷰를 만들수도 있음
  • 사용자별로 권한부여가능

종류

종류설명비고
심플 뷰(simple view)하나의 테이블에서 데이터를 생성한다.CREATE VIEW 명령어로 생성한다.
컴플렉스 뷰(complex view)여러 개의 테이블을 조인하여 데이터를 생성한다.CREATE VIEW 명령어로 생성한다.
인라인 뷰(inline view)SELECT 문의 FROM 절에 기술한 SELECT 문1회용 뷰로 권한을 제어할 수 없다.

OPTIMIZER(옵티마이저)

SELECT 문의 질의 성능 최적화를 위해서 실행계획을 수립하는 요소

구분RBOCBO
개념사전에 정의된 규칙 기반 계획최소 비용 계산, 실행 계획 수립
기준실행 우선순위액세스 비용
성능사용자의 SQL 작성 숙련도옵티마이저 예측 성능
특징실행 계획의 예측이 용이함저장된 통계 정보의 활용
고려 사항저효율, 사용자의 규칙 이해도예측 복잡, 비용 산출 공식 정확성

주로 CBO 방식을 사용

INDEX(인덱스)

데이터가 대용량이 될수록 SELECT조회가 효율적으로 떨어진다거나하면 기하급수적으로 느려진다.

데이터를 찾기위한 주소록 느낌

DBMS가 자동으로 생성해주기도 하고 사용자가 생성하는것도 가능

특징

  • 데이터 값에 빠르게 액세스하도록하는 데이터베이스 객체입니다.
  • 디스크 액세스 횟수를 줄일 수 있습니다.
  • DBMS가 자동으로 유지보수, 수동으로도 생성은 가능
  • 테이블에 영향도가 없기때문에 자유롭게 생성, 삭제 가능

영향도가 없다 뿐이지 생성 할 때 소요시간같은건 있다

데이터의 조회과정

  • 버퍼 캐시에 검색데이터가 있다면 더 빠르게 조회되어 출력

    그래서 동일한 데이터를 조회한다면

    처음 SELECT 할때보다 2번째가 더 빠름

  • 캐시에 없다면 DB에서 조회를 해서 캐시에 쌓은 후 결과를 전달

캐시에다 모든결과를 저장해 둘 수 없기 때문에 DB에 직접접근 해야 될 때도 있다.

그때 색인을 먼저 검색해서 찾으면 효율이 좋다. 그게 인덱스.

행을 식별하기위해서 만드는 색인을 row id 라고 한다.

인덱스를 이용한 데이터 조회 과정

종류

대표적으로

B-tree 인덱스, bitmap 인덱스가 있는데

일반적으로 B-tree 인덱스를 사용

  • B-tree 인덱스
종류설명사용 예
unique index중복 데이터가 없는 경우(unique)에 사용한다.기본 키, 유일 키 데이터
non-unique index중복 데이터가 있는 경우에 빠른 검색 결과를 보장한다.인덱스가 필요한 일반적인 데이터
descending index내림차순 데이터 값으로 인덱스를 생성한다.매출, 최근 일자 등
composite index여러 열을 합쳐서 하나의 인덱스를 생성한다.여러 조건이 필요한 경우예 고객번호 and 성별

트리 구조로 검색해 나가는 형태

  • bitmap 인덱스

데이터의 종류가 적고 동일한 데이터가 많은경우에 좋음

Y/N, 성별(남/여) 등...

인덱스를 잘못만들면 오히려 성능하락을 일으킴

유의사항

  • 분석 시스템(OLAP)과 운영 시스템(OLTP)에 따라 인덱스 유형이 달라진다.
  • 인덱스가 지나치게 많으면 과부하가 발생한다.
  • 조인할 때 옵티마이저가 인덱스를 사용하도록 유도해야 한다.
  • 데이터베이스 시스템 운영 상황에 따라 별도의 저장 공간으로 지정이 필요하거나 재생성이 필요할 수 있다.
  • DML 문을 자주 사용하는 경우에는 데이터베이스 시스템 성능에 악영향을 끼칠 수 있다.

인덱스를 추천하는 경우

  • 열이 WHERE 절의 조인 조건으로 자주 사용된다.
  • 열이 다양한 값을 포함한다. 또한 많은 수의 null 값을 포함한다.
  • 테이블 크기가 대형이고 대부분의 질의가 행의 2~4% 이하보다 적게 읽어 들일 것으로 예상된다.

인덱스를 비추천하는 경우

  • 열이 WHERE 절의 조인 조건으로 자주 사용되지 않는다.
  • 테이블 크기가 소형이고 열의 데이터 분포가 고르지 않다.
  • 질의의 대부분이 행의 2~4% 이상을 읽어 들일 것으로 예상된다.
  • 테이블이 자주 갱신된다. DML 문을 자주 사용하면 인덱스의 유지 작업을 위해 상대적으로 더 많은 시간이 걸린다.

인메모리 데이터 베이스

실시간 처리가 더욱더 중요해진 요즘에 등장

컴퓨터의 주 메모리에 모든 조직 또는 개인의 데이터를 저장합니다.(RAM)

장점

  • 기존에 디스크에 쓰는것에 비해서 속도가 월등하다
  • 주메모리에 바로 쓰기 때문에 과정 단순

단점

  • 휘발성메모리를 사용하기 때문에 장애시 데이터가 손실될 수 있다.
  • 보조기억장치가 달린 시스템만 도입가능
  • 어쨋든 RAM에 쓰기때문에 대용량에는 적합하지 않음, 디스크기반은 여전히 수 TB까지 사용가능

내구성을 보강하기 위해서 여러 기술 도입

스냅샷, 트랜잭션 로깅, 비휘발성 랜덤 액세스 메모리(NVRAM)..

PS.

레디스가 이거였구만..

더 찾아봤는데 속도 말고는 너무 위험한듯? 어쨋든 DB는 내구도가 엄청 중요한데

아무리 보완책이 있다지만 가능성을 무시할수는 없다고 생각됨.

게다가 RAM이 부족한 사태가 일어나면 가상메모리 사용으로 오히려 더 느려질수도 있음

그래서 날아가도 상관없는 데이터에만 붙여서 사용하는듯

ex) 로그인 세션 데이터

profile
거북이는 오늘도 걷는다

0개의 댓글