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) 단위 관리 |
'Job Interview & etc > Database' 카테고리의 다른 글
[기타]기타 프로젝트 지식 (0) | 2020.01.06 |
---|---|
빅데이터 직무 면접 질문(Hadoop) (0) | 2020.01.03 |
데이터베이스 보안 솔루션 직무 면접 질문 (Telnet , SSH란?) (0) | 2020.01.02 |