728x90
데이터베이스에서 인덱스를 사용하는 이유 및 장단점에 대해 설명해주세요.
인덱스(INDEX)란?
- 테이블에 대한 동작의 속도를 높여주는 자료 구조
- 인덱스는 테이블 내의 1개 혹은 여러 개의 컬럼을 이용하여 생성
- 고속의 검색 동작 뿐만 아니라 레코드 접근과 효율적인 순서 매김 동작에 대한 기초를 제공
검색이 잦은 컬럼에 인덱스를 생성하는게 보통이다.
장점
- 빠르게 검색가능
단점
- 검색(R)만 빠름, 나머지 CUD는 느려질 수 있음
- 추가 저장 공간 필요
- 인덱스를 생성하고 주기적으로 관리할 인력과 시간이 들어감
트랜잭션에 대해서 설명해주세요.
데이터베이스의 상태를 변경시키기 위해 수행하는 작업의 단위
트랜잭션의 특징으로 ACID가 있다.
ACID에 대해서 설명해주세요.
원자성(Atomicity)
- 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다.
- All or Nothing
일관성(Consistency)
- 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다.
- 반환 후와 전의 데이터 타입이 항상 동일
독립성(Isolation)
- (둘 이상의 트랜잭션이 동시에 실행되고 있을 경우, )어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다.
- 각각의 트랜잭션은 독립적이라 서로 간섭이 불가능
지속성(Durability)
- 트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영되어야 한다.
트랜잭션 격리 수준(Transaction Isolation Levels)에 대해서 설명해주세요.
동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것.
여러 개의 Transaction에 대해서 어느 정도로 떨어뜨려 놓을 것인가를 정하는 것이 바로 이 Isolation Levels 임!!!
즉, 간단하게 말해 특정 트랜잭션이 다른 트랜잭션에 변경한 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것.
- READ UNCOMMITTED
- 어떤 트랜잭션 변경 내용이 COMMIT이나 ROLLBACK과 상관없이 다른 트랜잭션에서 보여짐
- READ COMMITTED
- 어떤 트랜잭션의 변경 내용이 COMMIT 되어야만 다른 트랜잭션에서 조회할 수 있음
- REPEATABLE READ
- 트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 조회할 수 있는 격리수준
- SERIALIZABLE
- 가장 단순하고 가장 엄격한 격리수준
- 읽기 작업에도 공유 잠금을 설정하게 되고, 이러면 동시에 다른 트랜잭션에서 이 레코드를 변경하지 못하게 됨
- 하지만, 대용량 트래픽 처리가 필요하면 사용 불가능
- 사용하면 DB 성능이 떨어지고 커넥션 풀 자체가 많이 밀려서 다른 요청을 아무것도 못 받게 됨
아래로 내려갈수록 트랜잭션간 고립 정도가 높아지며, 성능이 떨어지는 것이 일반적임.
728x90