반응형

 

1. 데이터 베이스 특징

  • 독립성(물리적 / 논리적)
  • 무결성(잘못된 데이터 발생 하는 경우 수 방지 => 유효성 검사 통해 구현)
  • 보안성(인가된 사용자들만 자원에 접근)
  • 일관성(연관된 정보 논리적 구조로 관리)
  • 중복 최소화(자료 중복, 데이터 중복 문제 해결)

2. 데이터베이스 성능 

  • 디스크 I/O 를 줄이는 것에서 시작
  • 디스크 헤더 위치 이동 없이 얼마나 많은 데이터를 한번에 기록하느냐에 결정됨
  • DB 쿼리 튜닝 : 랜덤 I/O 자체 줄여주는 것 목적

3. 인덱스 (= 색인)

  • DBMS 에서 저장 성능 희생하여 데이터 읽기 속도 높이는 기능 
  • 데이터가 정렬되어 들어간다 
  • 양이 많은 테이블에서 일부 데이터만 불러 올 때, 풀 스캔 시 처리 성능 떨어짐 
  • 종류
    • B +- Tree 인덱스 : 원래 값 이용해 인덱싱
    • Hash 인덱스 : 칼럼 값으로 해시 값 계산하여 인덱싱 / 메모리 기반 DB 에서 많이 사용 
    • B > Hash  -> 왜? ==> SELECT 질의 시 부등호 연산 포함되어 = 연산에 특화된 Hash는 적합하지 않다 
  • 생성 시 고려 해야 할 점 
    • 테이블 전체 로우 수 15 % 이하 데이터 조회 시 생성
    • 테이블 건수가 적으면 인덱스 생성 X -> 풀 스캔이 빠름
    • 컬럼 : 유일성이 좋거나 범위가 넓은 값을 가지고 NULL 값이 많이 없는 것을 지정
    • 자주 쓰는 컬럼을 앞으로 지정 
    • DML(insert, delete, update) 시 인덱스에도 수정 작업이 동시에 발생하기에 많은 인덱스 생성 시 성능 부하 
    • DML 이 많은 테이블은 인덱스 생성 X
    • SQL 쿼리가 인덱스를 활용할 수 있게끔 짜기 

4. 클러스터 인덱스 vs 넌클러스터 인덱스 (oracle)

  • 클러스터 인덱스 : 실제 DB의 데이터 파일에 정렬되어 있는 상태로 디스크 저장/  테이블 당 한개
                                     / 기본키 값이 비슷한 레코드 끼리 묶어 저장 
  • 넌클러스터 인덱스 : 실제 DB의 데이터 파일에 정렬되지 않는 상태로 디스크 저장 / 테이블 당 여러 개 

5. 정규화 

  • 중복 저장 시 갱신 이상 발생 -> 이를 해결하기 위해 정규화 과정 거침
  • X의 값이 Y의 값을 유일하게 결정하면, "X는 Y를 함수적으로 결정"
  • 갱신 이상 종류 
    • 삽입 이상 
    • 삭제 이상
    • 수정 이상
  • 정규화란?
    • RDB 에서 중복을 최소화 하기 위해 데이터를 논리적으로 구조화하는 작업
    • 1NF : 원자값을 가진다
    • 2NF : 완전 함수적 종속 
    • 3NF : 이행적으로 종속되지 않는다
    • BCNF
  • 단점 : JOIN 연산이 많아져 , 질의에 대한 응답시간이 느려질 수 있음 

6. 트랜잭션 

 

  • 작업의 완전성 보장 
  • 논리적 작업 셋이 모두 완벽하게 처리하거나 또는 처리하지 못할 경우 원상태로 복구해서 작업의 일부만 적용되는 현상 발생하지 않게 만들어주는 기능 
  • 성질 : ACID(원자성 + 일관성 + 고립성 + 지속성)
  • LOCK : 동시성 제어 VS 트랜잭션 : 데이터 정합성 보장 기능 

7. DeadLock

  • 정의 : 두 개 이상의 트랜잭션이 특정 자원의 잠금(lock)을 획득한 채 다른 트랜잭션이 소유하고 있는 잠금을 요구하면 아무리 기다려도 상황이 바뀌지 않는 상태
  • 빈도 낮추는 방법
    • 트랜잭션을 자주 커밋 
    • 정해진 순서로 테이블 접근
    • 읽기 잠금 획득 사용 피함
    • 복수 행의 연결에서 잠금을 획득해 갱신을 직렬화 하면 동시성은 떨어지지만 데드락 회피 가능 
  • 데드락 발생 순서 
    • 트랜잭션 1 -> B t 첫번째 행 잠금 획득
    • 트랜잭션 2 => A t 첫번쨰 행 잠금 획득
    • 트랜잭션 commit 하지 않은 채 서로의 첫 번째 행에 대한 잠금 요청 시 데드락 발생
//잠금 획득 
Transaction 1> create table B (i1 int not null primary key) engine = innodb;
Transaction 2> create table A (i1 int not null primary key) engine = innodb;

Transaction 1> start transaction; insert into B values(1);
Transaction 2> start transaction; insert into A values(1);

//commit 없이 잠금 요청
Transaction 1> insert into A values(1);
Transaction 2> insert into B values(1);
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

 

8. VIEW

  • 정의 : 물리적인 테이블을 근거한 논리적인 가상 테이블
  • 이유 
    • 복잡하고 긴 쿼리문을 뷰로 정의하면 접근 단순화 시킬 수 있다
    • 보안 유리 

9. 데이터 무결성 제약조건 

  • 정의 : 테이블에 부적절한 자료가 입력된 것을 방지하기 위해 컬럼에 대해 정의하는 여러 가지 규칙
  • 무결성 제약 조건 종류
    • NOT NULL : NULL X
    • UNIQUE : 중복된 값 X / 항상 유일값
    • PK : NULL  X / 중복된 값 X  / 테이블 한 개에 유일하게 존재 
    • FK : 참조되는 테이블 칼럼 값 존재 시 허용 / 부모 키가 부모 테이블의 PK 나 UNIQUE 로 설정되어 있어야
    • CHECK : 저장 가능한 데이터 값의 범위 , 조건 지정해 설정한 값(타당한 값)만 허용 

10. 시퀀스(오라클)

  • 시퀀스 생성 시 PK와 같이 유일한 숫자를 자동을 생성하는 발생기 
  • 보통 PK로 설정하여 사용 
  • 사용 이유 : 캐쉬에 상주하고 있어 데이터 불러오는 속도가 빠름 

11. 트리거

  • 정의 : 자동으로 실행되게 정의한 저장 프로시저, INSERT / UPDATE/ DELETE 문에 대한 자동 호출
  • 사용 이유 : 데이터 무결성 강화 / 업무 처리 자동화 / 업무 규칙 보장 

12. 데이터웨어하우스 

  • DB 축적 데이터를 공통의 형식으로 변환해 의사결정에 도움 주는 DB

13. ORACLE DB VS MySQL

  • ORACLE : 대규모 트랜잭션 처리 / 여러 서버에 대용량 DB 분산 / 절차 언어 통해 DB 내장 프로그램 작성 지원(트리거 , 독립실행)
  • MySQL : 단일 DB / 대용량 DB X / DB 복원 저장점 없음 (COMMIT, ROLLBACK만 존재)

14. JOIN 

  • 카티션 곱(Cartesian Product)
    • 두 개 이상의 테이블에 대해 연결 가능한 행을 모두 결합하는 조인 방법이며, WHERE 절에서 조인 조건절을 생략하거나 조인 조건을 잘못 설정하여 양쪽 테이블을 연결하여 조건에 만족하 는 행이 하나도 없는 경우에 발생 합니다. 
    • 예) SELECT * FROM DEPT A, EMP B 

 

  •  EQUI JOIN
    • SQL 문에서 가장 많이 사용되는 조인으로 조인 대상 테이블에서 공통 칼럼을 ‘=’ 비교를 통해 같은 값을 갖는 행에 대해서 연결하여 결과를 생성하는 조인 방법입니다.
    • 예) SELECT A.name FROM DEPT A, EMP B WHERE A.code = B.code 

 

  •  NON-EQUI JOIN
    •  조인 조건에서 ‘<’,’>’, BETWEEN a AND b’와 같이 ‘=’ 조건이 아닌 다른 종류의 연산자를 사용 하는 조인 방법입니다.
    • 예) SELECT A.name FROM DEPT A, EMP B WHERE A.code > B.code

 

  •   OUTER JOIN
    • 두 개 이상의 테이블 조인 시 한쪽 테이블의 행에 대해 다른 쪽 테이블에 일치하는 행이 없더 라도 다른 쪽 테이블의 행을 NULL로 하여 행을 Return하는 것이 OUTER JOIN 입니다.연산자 로는 (+)기호를 사용합니다.
    • 조인 조건에 만족하지 않는 행도 나타냄 
    • 예) SELECT A.name FROM DEPT A, EMP B WHERE A.code = B.code(+)

 

  •   SELF JOIN
    • 한 테이블 내 두 개의 칼럼을 연결하여 EQUI JOIN을 하는 방법

15. DB 설계 시 중요

  • 무결성을 보장하는 것
  • 무결성 보장 방법
    • (애플리케이션) 데이터를 조작하는 프로그램 내에서 데이터 생성, 수정, 삭제 시 무결성 조건 검증
    • (DB트리거) 트리거 이벤트 시 저장 SQL실행, 무결성 조건 실행
    • (제약조건) DB제약조건 기능 선언하여 무결성 유지

16. SQL 문장 종류

명령어 종류 

명령어 

설명 

데이터 조작어

(DML :  Data Manipulation Language

SELECT 

 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 한다.

INSERT

UPDATE

DELETE 

 데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 데이터 삽입, 수정, 삭제

 데이터 정의어

(DDL : Data Definition Language)

CREATE

ALTER

DROP

RENAME

TRUNCATE 

 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을 DDL이라고 부른다.

데이터 제어어

(DCL : Data Control Language) 

GRANT

REVOKE 

 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 DCL이라고 한다. 

트랜잭션 제어어

(TCL : Transaction Control Language)

COMMIT

ROLLBACK

SAVEPOINT 

 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말한다. 

17. 데이터 유형

 데이터 유형

설 명 

CHAR(s) 

- 고정 길이 문자열 정보

- s는 기본 길이 1바이트, 최대 길이 Oracle 2000바이트 SQL Server 8000바이트 

- s만큼 최대 길이를 갖고 고정 길이를 가지고 있으므로 할당도니 변수 값의 길이가 s보다 작을 경우에는 그 차이 길이만큼 공간으로 채워진다.

VARCHAR(2) 

- CHARACTER VARYING의 약자로 가변 길이 문자열 정보(Oracle은 VARCHAR2 로 표현, SQL Server는 VARCHAR로 표현)

- s는 최소 길이 1바이트, 최대 길이 Oracle 4000바이트, SQL Server 8000 바이트

- s만큼의 최대 길이를 갖지만 가변 길이로 조정이 되기 때문에 할당된 변수값의 바이트만 적용된다. 

NUMERIC 

- 정수, 실수 등 숫자 정보 (Oracle은 NUMBER로, SQL Server는 다양한 숫자 타입 지원)

- Oracle은 처음에 전체 자리 수를 지정하고, 그 다음 소수 부분의 자리 수를 지정한다.

ex> 정수 부분이 6자리이고 소수점 부분이 2자리인 경우 NUMBER(8,2) 

DATE

- 날짜와 시각 정보

- Oracle은 1초 단위, SQL Server는 3.33ms(millisecond) 단위 관리 

 

 

반응형

+ Recent posts