DB

· DB
1. 인덱스(Index)란?인덱스(index)란?인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 우리가 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는것은 오랜 시간이 걸린다. 그렇기 때문에 책의 저자들은 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같다.데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕고 있다. 인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상된다. 그러한 이유는 해당 연산을 수행하려면 해당 대상..
· DB
1. 프라이머리 키(PK, Primary Key)와 클러스터링 테이블프라이머리 키(PK, Primary Key)의 특성데이터베이스, 특히 MySQL에서 프라이머리 키(PK, Primary Key)는 상당히 신중하게 결정되어야 한다. 그 이유는 PK가 레코드의 저장 위치를 결정하기 때문이다. 그래서 PK는 NOT NULL, 유니크 등의 특성을 갖는다. MySQL은 PK를 기준으로 유사한 값들이 함께 조회되는 경우가 많다는 점에서 착안하여, PK가 유사한 레코드들끼리 묶어서 저장한다. 유사한 것들을 묶는 것을 클러스터링이라고 하는데, 그래서 일반적으로 PK는 클러스터 인덱스(Clustered Index)라고도 불리며, 그 외의 일반적인 인덱스는 논클러스터 인덱스로 불린다. 그리고 이러한 클러스터링 특성 때문..
· DB
1. 트랜잭션의 격리 수준(Transaction Isolation Level)트랜잭션의 격리 수준(Isolation Level)이란 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 여부를 결정하는 것이다. 트랜잭션의 격리 수준은 격리(고립) 수준이 높은 순서대로 SERIALIZABLE, REPEATABLE READ, READ COMMITTED, READ UNCOMMITED가 존재한다. 참고로 아래의 예제들은 모두 자동 커밋(AUTO COMMIT)이 false인 상태에서만 발생한다.SERIALIZABLEREPEATABLE READREAD COMMITTEDREAD UNCOMMITED  SERIALIZABLESERIALIZABLE은 가장 ..
· DB
1. MVCC(다중 버전 동시성 제어)와 언두 로그(Undo Log), 리두 로그(Redo Log)MVCC(다중 버전 동시성 제어)란?데이터베이스를 사용하는 가장 큰 이유 중 하나는 바로 트랜잭션 때문이다. 하지만 모든 DBMS가 트랜잭션 기능을 제공하지는 않는데, 대표적으로 MySQL의 스토리지 엔진 중 하나인 MyISAM이 그렇다. 대신 MySQL의 InnoDB는 레코드 단위까지 트랜잭션을 지원해준다. 레코드 수준의 트랜잭션을 지원하기 위해서 InnoDB는 MVCC를 사용한다. MVCC(Multi-Version Concurrency Control, 다중 버전 동시성 제어)란 데이터베이스가 동시성을 제어하기 위해 사용하는 방법 중 하나로, 스냅샷을 이용한다. 여기서 멀티 버전이라는 것은 스냅샷을 통해 ..
· DB
1. 동시성 제어(Concurrency Control)동시성 제어(Concurrency Control)이란?동시성 제어란 DBMS가 다수의 사용자 사이에서 동시에 작용하는 다중 트랜잭션의 상호간섭 작용에서 Database를 보호하는 것을 의미한다. 일반적으로 동시성을 허용하면 일관성이 낮아지게 되며 이를 그래프로 나타내면 아래와 같다. 다수 사용자의 동시 접속을 위해 DBMS는 동시성 제어를 할 수 있도록 Lock 기능과 SET TRANSACTION 명령어를 이용해 트랜잭션의 격리성 수준을 조정할 수 있는 기능도 제공한다. 이렇게 동시성을 제어하는 방법에는 낙관적 동시성 제어와 비관적 동시성 제어가 있다.  [낙관적 동시성 제어(Optimistic Concurrency Control)]사용자들이 같은 데..
· DB
MySQL에서 사용되는 락은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다. 스토리지 엔진 레벨의 잠금은 테이블의 데이터를 다루기 위한 락이며, MySQL 엔진 레벨의 잠금은 테이블이나 데이터베이스 등과 같은 부분을 위한 락에 해당한다. 그리고 이번에 살펴볼 잠금은 스토리지 엔진 레벨의 잠금이다.레코드 락(Record Lock)갭 락(Gap Lock)넥스트 키 락(Next Key Lock)자동 증가 락(Auto Increment Lock)  레코드 락(Record Lock)일반적으로 레코드 락은 테이블 레코드 자체를 잠그는 락을 의미한다. 레코드 수준의 잠금은 상당히 작은 공간으로 관리되기 때문에 레코드 락이 페이지 락으로, 또는 테이블 락으로 레벨업되는 경우(락 에스컬레이션)는 없다...
· DB
제1 정규형 (1NF) 제1 정규형은 릴레이션에 속하는 속성의 속성 값이 모두 원자값(Atomic Value)만으로 구성되어야 한다. 원자값이란 더 이상 쪼개질 수 없는 단위를 말한다. 예를 들어 위처럼 릴레이션이 이루어져 있다면, 제1 정규형을 만족하지 못한다. 학번이 100인 학생의 과목 번호와 성적이 2개로 이루어져 있기 때문이다. 따라서 제1 정규형이 되려면 다음과 같이 속성 값을 분리해주어야 한다. 제1 정규형에서는 어떠한 이상현상이 발생할까? - 삽입 이상 : 학생이 새 과목을 수강 신청할 때 반드시 학생의 학과와 지도교수를 알아야 한다. (불필요한 정보) - 삭제 이상 : 300번 학생이 C400 과목을 취소하면, 해당 과목에 대한 정보가 모두 사라진다. - 갱신 이상 : 100번 학생이 지..
코딩스토리
'DB' 카테고리의 글 목록