Database: Difference between revisions
No edit summary |
|||
Line 41: | Line 41: | ||
== Archive Mode/Non-Archive mode == | == 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 == | == See also == |
Revision as of 11:29, 1 July 2016
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
- http://121202.tistory.com/17 - [DB용어] 트랜잭션( transaction ) 이란 ?
- http://www.dbguide.net/db.db?cmd=view&boardUid=12908&boardConfigUid=9&categoryUid=216&boardIdx=49&boardStep=1 - 노-아카이브와 아카이브 모드
- http://www.gurubee.net/lecture/1873 - 아카이브 로그 모드(Archive Log Mode)