반응형

# 데이터베이스 정규화의 성능 고려사항

  • 정규화 시 데이터 처리조건에 따라 성능이 향상 또는 저하 될 수 있다.
  • 정규화로 인해 조인 증가 시 데이터 조회 성능이 저하될 수 있다.
  • 데이터 조회와 입력/수정/삭제의 성능이 Trade-Off 되어 발생하기도 한다.
  • 조회 : 데이터 처리 조건에 따라 성능이 다르게 나타난다, 단일 테이블 조회 시 데이터 중복 제거로 조회 성능이 향상된다, 다수의 테이블을 조인하여 조회 시 I/O 증가와 조인 연산으로 조회 성능이 저하되기도 한다.
  • 입력/수정/삭제 : 데이터 중복 제거 되어 일반적으로 성능이 향상된다.

# 반정규화 성능 고려사항

  • 중복성의 원리(테이블 중복성, 컬럼 중복성, 관계 중복성)를 이용, 데이터 조회 성능을 향상시키는 역할을 한다.
  • 데이터 조회 시 I/O 양이 많아서 성능 저하가 예상되는 경우 반정규화를 수행해 성능을 향상시킨다.
  • 정규화로 인해 엔티티가 증가하고 조인의 개수가 많아지는 경우 반정규화를 고려한다.
반응형

'자격증 > SQLD & SQLP 자격증' 카테고리의 다른 글

서브쿼리  (0) 2022.05.09
관계형 데이터베이스 주요 용어  (0) 2022.04.22
주 식별자 도출 기준  (0) 2022.04.20
스칼라 서브쿼리, 인라인 뷰, 뷰  (0) 2022.03.29
DML, TCL  (0) 2022.03.28
반응형

# 주 식별자 도출 기준

  • 해당 업무에서 자주 이용되는 속성을 주 식별자로 지정.
  • 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면 주 식별자로 지정하지 않는다.
  • 복합으로 주 식별자를 구성 할 경우 너무 많은 속성이 포함되지 않도록 한다.
반응형
반응형

# 스칼라 서브쿼리 (Scalar Subquery)

  • 1 Row, 1 Column 만을 반환하여 컬럼처럼 사용이 가능한 서브 쿼리이다.
  • 주로 SELECT 절에서 사용.
  • 단일행 서브 쿼리이기 때문에 결과를 2건 이상 반환하면 에러가 발생한다.
SELECT A.EMP_NAME
	, A.SALARY
	, ( SELECT AVG(SALARY)
		FROM EMP
		WHERE DEPT_ID = A.DEPT_ID ) AS AVG_SALARY		// 스칼라 서브쿼리.
FROM EMP A;

# 인라인 뷰 (Inline View)

  • FROM 절에서 사용.
  • SQL 문이 실행될 때만 임시로 생성되는 동적인 뷰이기 때문에 Dynamic View 라고도 함.
SELECTB.DEPTNAME
	, A.AVG_SALARY
FROM ( SELECT DEPT_ID
        , AVG(SALARY) AS AVG_SALARY
        FROM EMP
        GROUP BY DEPT_ID 
	) A	// 인라인 뷰
	, DEPT B
WHERE A.DEPT_ID = B.DEPT_ID;

# 뷰 (View)

  • 하나 이상의 테이블에서사용자에게 데이터를 보여주기 위해 재정의한 가상 테이블(Virtual Table)이다.
  • 테이블은 실제 데이터를 갖고 있지만, 뷰는 실제 데이터를 가지지 않는다.

## 뷰의 특징

1. 독립성

  • 테이블 구조가 변경되어도 뷰를 재정의하면 되기 때문에, 애플리케이션을 변경할 필요가 없다.

2. 편리성

  • 복잡한 SQL문을 단순한 형태로 변환 가능.

3. 보안성

  • 민감한 정보를 제외하여 뷰를 정의하면 보안이 강화된다.
반응형
반응형

# DML (Data Manipulation Language)

  • SELECT (조회) / INSERT (입력) / UPDATE (수정) / DELETE (삭제)
  • 데이터베이스에 저장된 데이터를 조회,  입력, 수정, 삭제하는 데 사용하는 질의어.
  • 비절차적데이터 조작어.
  • 사용자가 무슨(What) 데이터를 원하는지만을 명세.
  • 데이터 부속어 (Data Sub Language) : C언어와 같은 호스트 프로그램 속에 삽입되어 사용되는 DML.

## DML 유형

1. SELECT

  • 데이터 조회.
  • 테이블을 구성하는 레코드 중 전체 또는 조건을 만족하는 레코드를 조회.
SELECT 문법)
SELECT [ALL | DISTINCT] 컬럼명 AS 별명
FROM 테이블명

=>
- SELECT 절에서 명시한 컬럼을 FROM 절의 테이블에서 조회.
- ALL, DISTINCT 키워드는 생략 가능
  (생략 시 기본적으로 ALL로 인식)
- ALL : 중복되는 데이터도 모두 조회(Default)
- DISTINCT : 중복된 데이터가 있는 경우 중복 제거하여 1건만 조회.
- AS : AS 키워드를 사용해서 컬럼의 별명(ALIAS) 변경 가능. 
  (AS 생략 가능)
- SELECT 절에서 WILDCARD(*) 및 ESCAPE 사용 가능.

2. INSERT

  • 데이터 입력.
  • 테이블에 새로운 레코드를 입력할 때 사용.
INSERT 문법 1)
INSERT INTO 테이블명(컬럼명) VALUES(입력값);

=>
- 데이터를 입력하고자 하는 테이블의 컬럼을 정의하여 데이터 입력.
- 컬럼과 입력값은 1:1 매핑, 정의하지 않은 컬럼은 디폴트로 NULL 입력.



INSERT 문법 2)
INSERT INTO 테이블명 VALUES (입력값);

=>
- 컬럼 생략하는 경우 모든 컬럼을 대상으로 데이터 입력.
- 입력값은 테이블의 컬럼 수와 같아야 함.

3. UPDATE

  • 데이터 수정.
  • 테이블에 있는 레코드 중 특정 레코드의 내용을 변경할 때 사용.
UPDATE 문법)
UPDATE 테이블명
  SET 컬럼명 = 입력값
WHERE 조건;

=>
- UPDATE 문의 테이블에서 SET 절의 컬럼을 입력값으로 수정.
- WHERE 절에서 데이터 수정 조건을 정의.

4. DELETE

  • 데이터 삭제.
  • 테이블에 있는 레코드 중 특정 레코드를 삭제할 때 사용.
DELETE 문법)
DELETE [FROM] 테이블명
WHERE 조건;

=>
- DELETE 문의 테이블에서 WHERE 절의 조건에 맞는 데이터 삭제.
- FROM 키워드 생략 가능.

 

# TCL (Transaction Control Language)

  • COMMIT / ROLLBACK / SAVEPOINT
  • 트랜잭션 제어 명령어.
  • 트랜잭션 : 업무 처리를 위한 데이터베이스의 논리적인 작업의 단위, 하나의 트랜잭션은 한 개 이상의 연산으로 이루어질 수 있고 해당 연산들은 완전히 처리 되거나 아예 한 개도 처리되지 않아야 한다. (All or Nothing)

1. COMMIT

  • 올바르게 수행된 트랜잭션의 결과를 데이터베이스에 반영.
COMMIT 문법)
INSERT INTO EMP
VALUES (102, 'AAA', 15, 100);
COMMIT;

=>
- INSERT 문을 이용하여 EMP 테이블에 데이터 입력.
- COMMIT 을 통해트랜잭션을 완료하고 데이터를 데이터베이스에 반영.
  • SQL Server : 기본적으로 AUTO COMMIT 모드, DML 구문이 성공이면 자동으로 COMMIT수행되고 오류가 발생하면 자동으로 ROLLBACK 이 수행된다. (AUTO COMMIT OFF인 경우 DDL 수행되어도 묵시적으로 COMMIT수행되지 않음)
  • ORACLE : 기본적으로 AUTO COMMIT OFF로 설정된 상태에서 DDL 수행 시 묵시적으로 COMMIT 수행

2. ROLLBACK

  • 문제 발생 시 하나의 트랜잭션을 취소.
ROLLBACK 문법)
UPDATE EMP
  SET EMP_NAME = 'AAAA'
WHERE EMP_NAME = 'B'
ROLLBACK;

=>
- UPDATE 문장으로 EMP 테이블에서 EMP_NAME이 'B' 이면 'AAAA' 로 변경.
- ROLLBACK 명령으로 트랜잭션을 취소하여 UPDATE 문장이 데이터베이스에 반영되지 않도록 함.
  • SQL Server : CREATE TABLE도 트랜잭션의 범주에 포함되어ROLLBACK 가능.

3. SAVEPOINT

  • 하나의 트랜잭션을 작게 분할하여 저장하는 기능을 수행.
SAVEPOINT 문법)
SAVEPOINT SP1;
INSERT INTO EMP VALUES(100, 'AAA', 30);
SAVEPOINT SP2;
UPDATE EMP
  SET EMP_NAME = 'AAAA'
WHERE EMP_NAME = 'B'
ROLLBACK TO SP2;

=>
- SAVEPOINT 저장점명; 으로 SP1 저장점 지정.
- INSERT 문으로 EMP 테이블에 데이터 입력.
- SAVEPOINT 저장점명; 으로 SP2 저장점 지정.
- UPDATE 문으로 EMP 테이블 데이터 업데이트.
- ROLLBACK TO 저장점명; 으로 트랜잭션을 취소.
  (SP2로 롤백하여 UPDATE 문의 실행은 데이터베이스에 반영되지 않도록 함)
반응형

+ Recent posts