DB

eri·2023년 3월 31일
0

cs

목록 보기
1/2

트랜잭션 과 무결성

  • 트랜잭션
    - 트랜잭션은 커넥션 단위로 수행합니다. 하지만 매번 이를 넘겨주기 어렵습니다.
    메소드의 호출을 하나의 트랜잭션에 묶이도록 하는것을 트랜잭션 전파 합니다.

  • 커밋과 롤백
    - 커밋은 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어 입니다. 트랜잭션 단위로 수행되며 변경된 내용이 모두 영구적으로 저장되는 것을 말합니다.
    - 롤백은 여러 이슈 때문에 트랜잭션전 으로 처리한 하나의 묶음 과정이 일어나기 전으로 되돌리는 일을 말합니다.

  • ACID
    - 일관성
    - 허용된 방식으로만 데이터를 변경하는 것을 의미합니다.
    - 격리성
    - 트랜잭션 수행 시 서로 끼어들지 못하는 것을 말합니다.
    - 지속성
    - 성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것을 의미합니다.
    - 원자성
    - all or Nothing


격리성

  • 격리성은 높을때와 낮을때로 구분가능합니다.
  • 격리성의 수준은 여러개가 존재합니다.

SERIALIZABE
트랜잭션을 순차적으로 진행 시키는 것을 말합니다.
여러 트랜잭션이 동시에 같은 행에 접근 할 수 없습니다.

REPEATABLE_READ
하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아줍니다.
하지만 새로운행을 추가하는것은 막지 않습니다.

READ_COMMITED
커밋 완료된 데이터에 대해서만 조회를 허용합니다.
하지만 어떤 트랜잭션이 접근한 행을 다른 트랜잭션이 수정할 수 있습니다.
그렇기때문에 트랜잭션 A가 같은 행을 다시 읽을때 다른 내용이 발견 될 수 있습니다.

READ_UNCOMMITED
트랜잭션이 커밋되기 이전에 다른 트랜잭션에 노출되는 문제가 있지만 가장 빠릅니다.

  • 격리수준에 따라 발생하는 현상

phantom read
트랜잭션 내에서 동일한 쿼리를 보냈을 때, 해당 조회 결과가 다른 경우를 말합니다.
non-repeatable read
트랜잭션 내의 같은 행에 두번 이상 조회가 발생했는데, 그 값이 다른 경우를 가리킵니다.
dirty read
트랜잭션이 실행 중일 때 다른 트랜잭션에 의해 수정되었지만, 아직 '커밋되지 않은' 행의 데이터를 읽을수 있을때발생합니다.


무결성

  • 개채 무결성
  • 차조 무결성
  • 고유 무결성
  • NULL 무경성


인덱스

인덱스란 ?

  • 데이터를 빠르게 찾을 수 있는 하나의 장치이며 B-트리로 구성 되어 있습니다.

    [! B-tree란 ? ]
    루트 노드, 브랜치 노드, 리프노드로 구성된 트리입니다.
    특정 데이터 탐색시에 각 노드에서 특정 범위를 탐색하여 빠르게 탐색이 가능합니다.

인덱스가 효율적인 이유

  • 균형잡힌 트리구조와 트리 깊이로 인한 대수 확장성
  • 이진트리 기준 레벨이 n이라고 할때, 2^n-1 의 리프노드를 가질 수 있습니다.
  • 인덱스는 B트리를 사용하며 차수가 2가 아닌 N이 될수있으며, 차수가 4이며 레벨이 3일때 4^3-1개의 63를 가질수있게 됩니다.

인덱스를 만드는 방법

클러스터형 인덱스

  • 클러스터형 인덱스는 테이블당 하나를 설정 할 수 있습니다.
  • primay key 옵션으로 기본키를 만들면 클러스터형 인덱스를 생성가능합니다.
  • unique not null 옵션을 붙이면 클러스터형 인덱스로 만들수 있습니다.

세컨더리 인덱스

  • 세컨더리 인덱스는 여러개의 필드(속성)를 이용해서 인덱스를 구성하는것을 말합니다.

인덱스는 무엇을 설정 해야할까?

인덱스는 특정 key를 트리구조로 생성 해놓고 각 리프노드의 주소가 가리키는 값이 실질적인 디스크(DB테이블)에 매핑 됩니다.

모든 필드를 인덱스로 지정하면 테이블을 하나 더 만들어 놓는것 과 같다고 생각합니다.
우리는 최적의 인덱스를 잘 조절해야 합니다.

  • 같음
  • 정렬
  • 다중 값
  • 카디널리티
    순으로 복합 인덱스를 설정 하면 좋다고 합니다.


조인의 종류

내부조인

왼쪽 테이블과 오른쪽 에티블의 두행이 모두 일치하는 행이 있는 부분만 표기

왼쪽조인

왼쪽 테이블의 모든 행이 결과 테이블에 표기 됩니다.

  • EX) A테이블 기준으로 B테이블 조인 , 만약 테이블 B에 데이터 없으면 null 값 표현

오른쪽 조인

오른족 테이블의 모든 행이 결과 테이블에 표기 됩니다.

풀조인

두개의 테이블을 기반으로 조인 조건에 만족 하지 않는 행까지 모두 표기합니다.



조인의 원리

중첩루프 조인

중첩 for 문과 같은 원리로 조건에 맞는 조인을 하는 방법

정렬 병합 조인

조인할 필드 기준으로 정렬하고 정렬이 끝난 이후에 조인 작업을 수행하는 조인입니다.

해시조인

해시테이블 기반으로 조인하는 방법입니다.
조인 테이블들의 일부의 테이블의 데이터가 메모리에 올라 갈 정도가 되어야 최적의 효율을 볼 수 있습니다.

참고도서 - 면접을 위한 cs 전공지식노트

profile
이해가 바탕이 되는 개발자가 되자 !

0개의 댓글