db(3)
-
Index 인덱스
인덱스란? 테이블의 검색 속도를 향상시키는 자료구조이다. 쉽게 생각해서 책의 색인과 같다 처음부터 완전 탐색하면 힘든데, abc순으로 정렬하면 빠르게 찾을 수 있지 않은가? ldex를 통해 조회 속도를 올릴 수 있으나, insert, delete,update 속도는 느려진다. 그리고 인덱스를 따로 관리하기 위한 추가 작업이 필요하고, 잘못 사용할 결우 오히려 성능이 악화된다. 인덱스는 그럼 언제 사용하는 것이 좋을까? - 규모가 큰 테이블 - insert, update, delete가 자주 발생하지 않는 컬럼 - join, where, order by가 자주 사용되는 컬럼 - 데이터 중복도가 낮은 컬럼 그럼 Index는 어떻게 구현하는가? 대표적인 방식이 헤시 테이블과 B+ Tree가 있다. 해시 테이블..
2023.11.26 -
DB Lock
Lock 같은 데이터를 동시에 접근하는 상황을 방지하기 위해 접근 한 곳, 혹은 허용되는 수만 접근 되도록 설정하는 것. 데이터의 무결성과 일관성을 지키기 위해 사용 Lock 종류는 다음과 같다 Shared Lock - 공유락 데이터를 변경하지 않는 읽기 명령에 주어진다. 여러 사용자가 동시에 데이터를 읽어도 데이터 일관성에는 아무런 영향을 주지 않는다. 따라서, 공유 락 끼리는 동시 접근이 가능하다. Exclusive Lock - 베타 락 데이터에 변경을 가하는 명령에 주어지는 락이다. Write Lock으로도 불린다. 다른 세션이 해당 자원에 접근(Select, Insert, update, delete...)를 막는다. 베타 락은 트랜젝션 동안 유지된다. Update Lock - 업데이트 락 배타 락..
2023.11.25 -
DB isolation level (격리수준)
격리수준이란(isolation level) 트랜젝션 간 고립 수준을 말한다. 즉, 다른 트랜젝션이 변경한 데이터에 대한 접근 강도를 의미한다. * dirty read : 다른 트렌젝션에서 아직 commit 되지 않은 데이터를 읽는 것 * non-repeatable read : 다른 트랙젝션에서 데이터 수정/삭제 시 커밋한 데이터를 읽을 수 있는 것. 한 트랜젝션에서 같은 쿼리로 2번 이상 조회했을 때 그 결과가 상이한 상황 * phantom read : 데이터 삽입 시 발생, 한 트랜젝션에서 같은 쿼리를 2번 이상 조회했을 때 없던 결과를 조회하는 상황, 다른 트랜젝션이 commit한 데이터가 있더라도, 자신의 트랜젝션에서 읽었던 내용만 사용 격리수준을 좀 더 자세히 알아보자 LEVEL 0 - Read ..
2023.11.25