IT,프로그래밍/CS&DB

DB 기술면접 질문 - 1

Index

Index란?

DB에서 select처리를 빠르게 하기 위하여 추가적인 디스크를 사용하여 색인을 하는것.

Index를 어떤 컬럼에 거는가?

select를 시행할때 사용하는 join, where, orderby 절 구문에 사용되는 컬럼에 주로 index를 사용한다.

이때, Delete, Update, Insert등이 자주 일어나는 구문에 걸게되면, 오히려 index쓰기, 삭제 작업 때문에 시간이 더 걸리게 되니 주의하여야한다.

Index의 장단점은?

장점

select의 속도를 향상시켜서 join, where, orderby등의 작업에서 시간을 단축시킬수있다

단점

Index는 디스크에 추가적으로 Index정보를 쓰기 때문에, 디스크 용량을 더 소모한다는 단점이 있고, Update, Delete, Update와 같은 작업을 수행할때, Index역시 바꿔줘야 하기에 자칫 잘못하면 오히려 더 많은 시간을 소모하게 되는 역효과가 날수있다.

Index의 구조는?

해시 테이블

key-value로 이루어져 있는 자료구조다.
내부적으로 배열(버킷)을 사용하여 데이터를 저장하기에 빠른 검색소도가 특징이다.
다만 이때, = 연산이 빠른대신에 >,< 와 같은 부등호 연산은 탐색이 비효율적이다.

B-tree

자식 노드가 항상 정렬이 되어있는 트리 자료구조이다.
루트에서 리프노드까지 항상 같은 깊이를 가지고 있다.
    따라서, 어떤 값도 같은 결과를 얻을수있다.
    즉, >,< 와 같은 부등호 연산의 속도가 빠르다.

B+Tree

B-Tree와는 다르게 브랜치 노드는 value의 정보가 없고 오로지 key값만 존재한다.
    그렇기에 B-Tree보다 메모리를 적게 차지하지만, Value를 찾기위해선 리프 노드까지 이동해야 하는 단점이있다.
링크는 linked list구조로 되어있어서, 리프 순회가 더 빠르다.
Full scan시에 B-Tree는 결국 모든 노드를 확인해야하지만, B+tree는 리프노드에
모든 value가 있기에, 리프노드만 순회하면된다.
즉, DB에 좀더 적합한 구조이다.

Connection Pool

Connection Pool이란?

DB와의 커넥션 객체를 미리 할당을 해서 Pool에 넣어둔다. 이후 DB연결 요청이 들어왔을때 Pool의 있는 Connection을 사용하고, 작업이 끝나면 반납하는방식. Connection을 잇는 작업을 중복으로 처리되지 않도록해서 성능을 올리는 방법.

Connection Pool을 왜 쓰는가?

Connection Pool을 사용할경우, 연결이 되어있는 Connection이 이미 Pool에 있기 때문에, Connection을 매번 지어줄 필요없다.
따라서, 기존의 작업을 할때마다 conection을 맺고 끊는 과정을 줄여서 성능을 향상시킬수있다

실시간 통신과 Pool사용시의 차이가 무엇인가요?

실시간 통신은 DB에 작업을 할떄마다
1. DB connection을 만든다.
2. DB의 작업을 처리한다
3. DB와 Connection을 해제한다.
의 과정을 거치지만, Pool을 사용하면 1번과 3번의 과정이 생략이되기에, 많은 request처리에서 성능이 더 좋다.

하지만, Connection도 객체기 때문에, 너무 많이 만들어 두게되면 메모리를 더 많이 소모해서 오히려 성능이 떨어지기에 주의해야한다.

트랜잭션

트랜잭션이란?

여러개의 작업을 하나로 묶은 단위이다.
트랜잭션은 모두 실행되거나, 모두 실행되지 않습니다.
이와 같은 트랜잭션에는 ACID라는 특징이 있습니다.

ACID원칙이란?

트랙잭션의 특성 4가지의 앞글자를 따서 만든 약어입니다.

A - Atomic(원자성): 트랜잭션의 작업이 전부실행되거나, 전부 실행이 되지 않거나를 보장하는것을 말합니다.
(ex: 송금만 되고, 기록이 되지 않는 일이 발생하지 않는다. )
C - Consistency(일관성): 트랜잭션이 성공적으로 완료되면 일관적인 DB상태를 유지하는것을 말합니다. (ex : int가 string이 되지않는다)
I - Isolation(고립성):트랜잭션 실행중에는 다른 트랜잭션이 끼어들지 못합니다. (ex: 송금 트랜잭션중 삭제 트랜잭션이 끼어들지 못한다.)
D - Durability(영구성): 트랜잭션이 실행뒤에 commit이된 사항은 영구적으로 반영되는것을 말합니다.

'IT,프로그래밍 > CS&DB' 카테고리의 다른 글

[ROW_NUMBER()]컬럼에 1씩 증가하는 숫자 추가  (0) 2022.04.03