Database

From 탱이의 잡동사니
Jump to navigation Jump to search

Overview

Database 원론 내용 정리

Transaction

데이터 베이스 내에서 한꺼번에 수행되어야 할 일련의 연산. 즉, 연산이 전부 동작되거나, 전부 안되거나해야 한다.

  • 한꺼번에 완료가 된 경우에는 성공적인 종료 후, COMMIT : 이 경우, 모든 작업 결과는 데이터베이스에 반영되게 된다.
  • 취소가 된 경우에는 비정상적인 종료 후, ROLLBACK : 이 경우, 모든 작업 결과는 취소되며, 데이터베이스에 반영되지 않는다.

Properties

  • 원자성(Atomicity)
분리할 수 없는 하나의 단위로 작업은 모두 완료되거나 모두 취소 되어야 한다.
  • 일관성(Consistency)
사용되는 모든 데이터는 일관되어야 한다.
  • 격리성(Isolation)
접근하고 있는 데이터는 다른 트랜젝션으로부터 격리되어야 한다.
트랜젝션이 진행되기 전과 완료된 후에는 상태를 볼 수 있지만, 트랜젝션이 진행되는 중간의 데이터를 볼 수는 없다.
  • 영속성(Durability)
트랜잭셕이 정상 종료되면 그 결과를 시스템에 영구적으로 적용되어야 한다.
  • 순차성(Sequentiality)
데이터를 다시 로드하고 트랜젝션을 재생하여 원래 트랜젝션이 수행된 후의 상태로 데이터를 돌릴 수 있어야 한다.

다음의 예를 보자.

카드하나를 들고서 은행 인출기 앞으로 간다.

1. 카드를 넣는다.
2. 어떤거래를 할지 선택을하고
3. 비밀번호를 눌러 인증을 받고
4. 거래를 완료한다.

이 네가지 과정을 묶어서 트랜잭션이라고 한다.

거래까지 완료됬으면 COMMIT

중간에 비밀번호를 틀리거나, 인증을 받았는데 거래를 취소하거나 하는 일이 발생해서 처음으로 돌아갈경우에는 ROLLBACK 이라고 한다.

Archive Mode/Non-Archive mode

Index

SQL 서버에서 테이블을 만들고 데이터를 추가, 수정, 삭제할 때 데이터의 레코드는 내부적으로 아무런 순서 없이 저장된다. 이때 데이터 저장영역을 Heap 이라고 한다. Heap 에서는 인덱스가 없는 테이블의 데이터를 찾을 때 무조건 전체 데이터 페이지의 처음 레코드부터 끝 페이지의 마지막 레코드까지 다 읽어서 검색조건과 비교하게 된다. 이런 식의 데이터 검색방법을 테이블 스캔(table scan) 혹은 풀 스캔(full scan)이라고 한다. 이럴 경우 양이 많은 테이블에서 일부분의 데이터만 불러올 때 풀 스캔을 하면 처리 성능이 떨어진다. 즉, 인덱스는 데이터를 select 할 때 빨리 찾기 위해 사용된다.

Consider

인덱스를 생성 시에는 where 정과 join, order by 등과 관련된 칼럼 중 사용 빈도가 높고 값의 선별도가 좋은 칼럼을 사용해야 한다. 반대로 사용 빈도가 낮고 칼럼의 선별도가 나쁜, 예를 들어 한 칼럼의 값이 true/false, 성별(M/F) 등에는 인덱스를 사용하지 않는 것이 좋다. 또 테이블이 작거나 자주 갱신 될 때도 사용하지 않는 것이 좋다.

Create index

인덱스는 크게 clustered 와 non-clustered 인덱스로 나뉠 수 있다.

clustered 인덱스는 물리적 정렬로 DB에 데이터를 입력시 이것을 기준으로 입력이 된다. 따라서 한 테이블에 오직 하나만 존재 할 수 있으며 table 을 열었을 때 order by를 사용하지 않아도 데이터가 clustered 인덱스에 따라 정렬이 되어 있는 것을 확인할 수 있다. 물리적으로 정렬이 되어 있는 만큼 가장 빠른 처리를 한다.

non-clustered 인덱스는 clustered 인덱스와는 달리 중복을 값을 가지면서 한 테이블에 여러 개를 생성할 수 있다.

그리고 unique 라는 것도 있다. unique 는 말 그대로 중복을 허용하지 않는 값을 보호할 때 사용한다. 예를 들어 회원 관리 프로그램에서 아이디가 중복되는 것을 막고자 한다면 이 옵션을 사용하면 된다.

See also