DBMS는 데이터베이스 관리 시스템을 나타낸다.
사용자가 데이터에 관한 정보를 효율적이고 효과적으로 구성, 검색할 수 있도록 하는 응용프로그램 모음이다
Relational DataBase Management System
관계형 모델을 기반으로 하는 DBMS 유형이다
RDBMS 테이블은 서로 연관되어있어 일반 DBMS보다 효율적으로 데이터를 저장, 구성 및 관리할 수 있다.
데이터의 원자성, 일관성, 격리 및 내구성을 유지하며 데이터 무결성을 높인다
SQL문은 기본적으로 DDL, DML, DCL 세가지 범주로 나뉜다.
- DDL: 데이터정의 언어 : 데이터를 보유하는 구조를 정의하는데 사용된다 . 명령은 자동 커밋된다
- DML : 데이터 조작 언어 : 명령은 데이터베이스의 데이터를 조작하는데 사용된다. 커밋되지 않으며 롤백할 수 있다.
- DCL : 데이터 제어 언어 : 데이터를 사용하기 위한 액세스 권한 취소와 같이 데이터베이스에서 데이터의 가시성을 제어하는데 사용된다.
- Automicty 원자성: 트랜잭션의 연산이 DB에 모두 반영되던지 전혀 반영이 되지 않던지 둘중 하나만 수행해야한다
- Consistency 일관성 : 트랜잭션이 성공적으로 완료 된 뒤에는 언제나 일관성 있는 DB상태로 변환되어야 한다
- Isolation 독립성 : 수행중인 트랜잭션이 완전히 완료되기 전에는 다른 트랜잭션에서 수행결과를 참조할 수 없다
- Durablility 지속성 : 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다
인덱스는 데이터분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료구조이다. 테이블 내의 1개의 컬럼, 혹은 여러개의 컬럼을 이용하여 생성될 수 있다.
사용하는 이유
- 업무 규칙을 보장
- 업무 처리 자동화
- 데이터 무결성 강화
데이터 베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성
- 개체 무결성 : 기본키를 구성하는 속성은 NULL값이나 중복값을 가질 수 없다
- 참조 무결성 : 외래키 값은 NULL이거나 참조 테이블의 기본키 값이어야 한다
해결하는 방법
- 예방기법: 각 트랜잭션이 실행되기 전에 필요한 데이터를 모두 로킹 해주는 것이다
- 회피기법 : 자원을 할당할 때 시간 스탬프를 사용하여 교착상태가 일어나지 않도록 회피하는 방법이다
이상 현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입,삭제,수정할 때 생기는 논리적 오류를 말한다
- 삽입 이상 : 자료를 삽입할 때 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
- 갱신 이상 : 중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상
- 삭제 이상 : 어떤 정보를 삭제하면, 의도하지 않은 다른 정보까지 삭제되어버리는 현상
Isolation Level 의 종류
- Read Uncommitted (레벨 0)
SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리지 않는 Level
트랜잭션에 처리중인 혹은 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용한다.
따라서, 어떤 사용자가 A라는 데이터를 B라는 데이터로 변경하는 동안 다른 사용자는 아직 완료되지 않은(Uncommitted 혹은 Dirty) 트랜잭션이지만 변경된 데이터인 B를 읽을 수 있다.
데이터베이스의 일관성을 유지할 수 없다.- Read Committed (레벨 1)
SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리는 Level
트랜잭션이 수행되는 동안 다른 트랜잭션이 접근할 수 없어 대기하게 된다.
Commit이 이루어진 트랜잭션만 조회할 수 있다.
따라서, 어떤 사용자가 A라는 데이터를 B라는 데이터로 변경하는 동안 다른 사용자는 해당 데이터에 접근할 수 없다.
SQL Server가 Default로 사용하는 Isolation Level- Repeatable Read (레벨 2)
트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 Level
트랜잭션이 범위 내에서 조회한 데이터의 내용이 항상 동일함을 보장한다.
따라서, 다른 사용자는 그 영역에 해당되는 데이터에 대한 수정이 불가능하다.- Serializable (레벨 3)
트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 Level
완벽한 읽기 일관성 모드를 제공한다.
따라서, 다른 사용자는 그 영역에 해당되는 데이터에 대한 수정 및 입력이 불가능하다.
테이블에 저장된 데이터를 읽는 방식은 두 가지이다
Table Full Scan은 해당 테이블에 전체 블록을 읽어서 사용자가 원하는 데이터를 찾는 방식이다.
Index Range Scan은 인덱스를 이용하여 데이터를 일정부분읽어서 ROWID로 테이블 레코드를 찾아가는 방식이다. ROWID는 테이블 레코드가 디스크 상에 어디 저장됐는지를 가리키는 위치 정보이다.
데이터베이스에서 인덱스는 두 가지 종류이다
Clustered Index
- 테이블당 1개씩만 허용된다.
- PK설정 시 그 칼럼은 자동으로 클러스터드 인덱스가 만들어진다.
- 인덱스 자체의 리프 페이지가 곧 데이터이다. 즉 테이블 자체가 인덱스이다. (따로 인덱스 페이지를 만들지 않는다.)
- 데이터 입력, 수정, 삭제 시 항상 정렬 상태를 유지한다.
- 비 클러스형 인덱스보다 검색 속도는 더 빠르다. 하지만 데이터의 입력. 수정, 삭제는 느리다.
Non Clustered Index
- 테이블당 약 240개의 인덱스를 만들 수 있다.
- 인덱스 페이지는 로그파일에 저장된다.
- 레코드의 원본은 정렬되지 않고, 인덱스 페이지만 정렬된다.
- 인덱스 자체의 리프 페이지는 데이터가 아니라 데이터가 위치하는 포인터(RID)이기 때문에 클러스터형보다 검색 속도는 더 느리지만 데이터의 입력, 수정, 삭제는 더 빠르다.
- 인덱스를 생성할 때 데이터 페이지는 그냥 둔 상태에서 별도의 인덱스 페이지를 따로 만들기 때문에 용량을 더 차지한다
참고자료
http://egloos.zum.com/ljlave/v/1530887
https://hyonee.tistory.com/41
https://wedul.site/403
https://junghn.tistory.com/entry/DB-클러스터-인덱스와-넌클러스터-인덱스-개념-총정리