티스토리 뷰

728x90
반응형

데이터베이스 기본

트랜잭션

: 비인가자로부터 데이터 보장위해 DBMS가 가지는 특성, DBMS에서 하나의 논리적 기능을 정상수행하기 위한 작업의 기본단위.

 

특성 설명 주요기법
원자성 -분해불가한 작업의 최소단위
-연산전체가 성공또는실패
(하나라도 실패되면 전체취소됨.)
commit
rollback
회복성 보장
일관성 트잭 실행성공후 항상 일관된 DB상태 보존해야함 무결성제약조건
동시성 제어
격리성 트잭 실행중 생성하는 연산 중간결과를 다른 트잭이 접근불가 Read Uncommited
Read Commited
Repeatable Read
Serializeble
영속성 성공완료된 트잭결과는 영속적으로 DB에 저장됨 회복기법

*read uncommited: 한 트잭에서 연산 중인 데이터를 다른 트잭이 읽는 것을 허용, 연산중인 데이터에 대한 연산은 불허

*read commited: 트잭에서 연산수행시 연산완료될때까지 대상 데이터에 대한 읽기 제한, 연산완료되어 커밋된 데이터는 다른 트잭이 읽기 가능.

*repeatable read: 선행 트잭이 특정데이터를 읽을 때 트잭 종료시까지 해당 데이터에 대한 갱신/삭제를 제한

*serializable read: 선행 트잭이 데이터 영역을 순차적으로 읽을 때, 데이터 영역 전체 접근을 제한함.

 

1) 활동상태(active): 초기상태. 트잭 실행중

2) 부분완료상태: 마지막 명령문이 실행됨

3) 완료상태(commited): 트잭이 성공적으로 완료됨

4) 실패상태: 정상적 실행이 더 이상 진행될 수 없음

5) 철회상태: 트잭 취소되고 DB가 트잭 시작전상태로.

 

트랜잭션 제어:

트랜젝션 제어언어(TCL)은 트잭 결과를 허용/취소목적으로 사용되는 언어임.

1) COMMIT(트잭확정) :트잭을 메모리에 영구적저장

2) ROLLBACK: 트잭취소. 트잭내역 저장 무효화

3) CHECKPOINT: 저장시기설정. 롤백위한시점 지정

 

병행제어(일관성 주요기법):

다수사용자환경에서 여러 트잭을 수행할 때, DB일관성유지위해 상호작용을 제어하는 기법.

목적: DB 공유 최대화, 시스템 활용도 최대화, DB일관성 유지, 사용자 응답시간 최소화

 

병행제어 미보장시 문제점:

1) 갱신손실: 먼저실행된 트잭결과를 나중트잭이 덮어씀

2) 현황파악오류: 트잭중간수행 결과를 다른 트잭이 참조해 발생하는 오류

3) 모순성: 두 트잭이 동시실행되어 DB일관성 결여

4) 연쇄복귀: 복수의 트잭이 데이터 공유시, 특정 트잭이 취소할 경우 트잭 처리한 곳의 부분을 취소하지 못함

병행제어기법 설명
Locking 같은 자원을 액세스하는 다중 트잭환경에서 DB 일관성, 무결성 유지위해 트잭 순차적 진행을 보장하는 직렬화기법.
-로킹단위가 작아지면 DB공유도증가, 로킹 오버헤드 증가
낙관적검증 트잭이 어떤 검증도 수행하지 않고 트잭 수행하고 종료시 검증 수행해 DB에 반영하는 기법
타임스탬프 순서 트잭과 트잭이 읽거나 갱신한 데이터에 대해 트잭이 실행시작하기 전, 타임스탬프를 부여해 시간에 따라 트잭 작업을 수행함.
다중버전 동시성제어 트잭의 타임스탬프와 접근하려는 데이터의 타임스탬프를 비교해 직렬가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법

데이터 베이스 고립화 수준(격리성 주요기법):

: 다른 트잭이 현재 데이터에 대한 무결성을 해치지 않기 위해 잠금을 설정하는 정도.

고립화 수준 종류: Read Uncommited, Read commited, repeatable read, Serializable read

 

회복기법(영속성 주요기법):

트잭 수행중 장애로 손상된 DB를 손상전상태로 복구작업.

회복기법종류 설명
로그기반 회복기법 지연 갱신 회복 기법과 즉각 갱신 회복 기법이 있음.
1) 지연갱신회복기법: 트잭 완료전까지 DB에 기록하지않음
2) 즉각갱신회복기법: 트잭 수행중 갱신결과를 바로 DB에 반영
체크포인트 회복기법 검사점 이후 처리된 트잭에 대해서만 장애이전상태로 복원
그림자페이징회복기법 DB 트잭 수행시 복제본 생성해 DB 장애시 이를 이용해 복구

DDL 명령어: 생성(create), 수정(alter), 삭제(drop, truncate)

create table 제약조건

1) primary key: 유일하게 테이블 각 행을 식별

2) foreign key: 외래키 정의. 참조대상을 테이블로명시

3) unique : 유일한 값을 갖도록함

4) not null

5) check: 개발자가 정의하는 제약조건. (True조건지정)

6) default: insert 시 값안넣을 때의 기본값.

 

alter table 테이블명 ADD 컬럼명 데이터타입 제약조건;

alter table 테이블명 mofity 컬럼명 데이터타입 제약조건;

alter table 테이블명 drop 컬럼명;

drop table 테이블명 cascade|restrict;

-truncate table:테이블 내의 데이터를 삭제하는 명령

-truncate table 테이블명;(모든데이터 삭제)

-create view 뷰이름 as (select ~ )

: view 테이블 select문에는 union, orderby 절을 사용할 수 없음.

create or replace view: 뷰를 교체하는 명령.

create [unique] index 인덱스명 on 테이블(컬럼명1, 컬럼명2, ...);

alter [unique] index 인덱스명 on 테이블명(컬럼명1,.)

 

DDL의 대상:

1) 도메인: 하나의 속성이 가질 수 있는 원자값 집합

2) 스키마: DB 구조, 제약조건 등의 정보를 담은 구조.

외부스키마(=서브스키마): 사용자/개발자관점 DB논리적 구조. 사용자 뷰를 나타냄.

개념스키마: DB 전체적인 논리적 구조. 전체적 뷰를 나타냄, 개체간관계, 제약조건, 접근권한, 무결성, 보안에 대해 정의

내부스키마: 물리적 저장장치 관점 DB구조. 실제 DB에 저장될 레코드 형식을 정의하고 저장 데이터 항목의 표현방법, 내부 레코드의 물리적 순서 등을 표현.

3) 테이블: 데이터 저장 공간

4) : 하나 이상의 물리테이블에서 유도되는 가상테이블

5) 인덱스: 검색빠르게 하기위한 데이터 구조. 테이블의 특정 레코드 위치를 알려주는 용도로 사용됨.

인덱스 종류 설명
순서인덱스 데이터가 정렬된 순서로 생성됨.
B-Tree 알고리즘 활용
해시인덱스 직접 데이터에 키 값으로 접근
데이터 접근비용이 균일, 튜플양에무관
비트맵인덱스 각 컬럼에 적은 개수값이 저장된 경우 선택하는 인덱스. 수정변경적을 경우 유용
함수기반인덱스 수식이나 함수 적용해 만듦
단일인덱스 하나의 컬럼으로만 구성한 인덱스
결합인덱스 2개 이상 컬럼으로 구성. WHERE조건으로 사용하는 빈도가 높은경우
클러스터드인덱스 PK기준 레코드를 묶어 저장. 저장데이터의 물리적 순서에 따라 인덱스 생성. 특정 범위 검색시 유리함.

인덱스 스캔방식

- 테이블: = relation = entity.

: 논리테이블로서, 사용자에게 테이블과 동일함.

뷰의특징 설명
논리적 데이터 독립성제공 DB에 영향안주고 원하는대로 데이터 접근가능
데이터 조작 연산 간소화 원하는 구조로 형성해 데이터 조작 연산 간소화
보안기능(접근제어) 제공 선택되지않은 필드 조회 및 접근 불가
뷰 변경불가 뷰는 ALTER로 변경불가

뷰의목적: 단순 질의어 사용.

장점 단점
논리적 데이터독립성제공 뷰 자체 인덱스 불가
사용자 데이터관리 용이 뷰 정의 변경하려면 뷰 DROP(삭제)후 재생성
데이터 보안 용이 뷰 내용 삽입/삭제/변경 제약 있음.

-DML(data manipulation langauge): 데이터조작어

: 데이터를 입력, 수정, 삭제, 조회하는 기능

select, insert, update, delete

HAVING: GROUP BY에 의해 분류한 후 그룹에 대한 조건 지정

LIKE % : 0개 이상의 문자열 일치

LIKE [] : 1개의 문자와 일치

LIKE [^]: 1개의 문자와 불일치

LIKE_: 특정 위치의 1개의 문자와 일치

 

- 조인

내부조인(inner join) 공통 컬럼값이 같은 경우
외부조인(outer join) -left outer join:왼쪽테이블의 모든데이터와 오른쪽 테이블의 동일 데이터를 추출
-right outer join: 오른쪽 ..
-full outer join: 양쪽의 모든 데이터 추출
교차조인(cross join) 조인조건 없는 모든 데이터 조합을 추출
self join 자기 자신에게 별칭지어 조인

- 서브쿼리:SQL문안에 포함된 또다른 SQL

1) SELECT절 서브쿼리: SELECT절 안에 들어가있음. 스칼라 서브쿼리라고도 함. SUM,COUNT 등 집계함수가 많이 쓰임

2) FROM절 서브쿼리: FROM절안에 들어가있음. 인라인 뷰라고도 함. 뷰처럼 결과가 동적으로 생성된 테이블 형태로 사용 가능

3) WHERE절 서브쿼리: WHERE절안에 들어가있음. 중첩서브쿼리라고도 부름.

- 집합연산자:테이블을 집합개념으로 보고, 두 테이블 연산에 집합 연산자 사용.

UNION, UNION ALL, INTERSET, MINUS

ex) SELECT * from A UNION select * from B

 

- DCL(데이터 제어어): DBA가 데이터보안, 무결성유지, 병행제어, 회복 위해 사용하는 제어용 언어.

1) GRANT(사용권한부여): grant 권한 on 테이블 to사용자; grant update on 테이블 to 사용자;

2) REVOKE(사용권한취소)

: revoke 권한 on 테이블 from 사용자; revoke update on 테이블 from 사용자;

 

응용 SQL 작성하기

- 집계성 SQL 작성:

데이터분석함수의 개념: 총합, 평균 등 데이터 분석위해 복수 행 기준의 데이터를 모아 처리하는 것을 목적으로한 다중행함수.

: GROUPBY 구문 활용해 복수행을 그룹핑.

: SELECT, HAVING, ORDERBY 등 구문에 활용

1) 집계함수

: 여러 행 또는 테이블 전체로부터 한 결과값 반환

select from where groupby having 조건식

groupbynullrow는 제외함.

groupby 구문은 실제 구체적 데이터 분석값을 보고자하는 컬럼단위를 선정할 때 사용되는 기준임.

having구문은 where구문내에서 사용불가한 집계함수 구문을 적용해 복수행 계산결과를 조건별로 적용하는데 사용.

: COUNT, SUM, AVG, MAX, MIN, STDDEV(표준편차), VARIAN(분산계산)

 

2) 그룹 함수

: 소그룹간 소계 및 중계 등 중간 합계 분석 데이터 산출

: 테이블 전체행을 하나 이상의 컬럼 기준으로 컬럼값에 따라 그룹화해 그룹별로 결과 출력하는 함수.

ROLLUP: 소계(소그룹의합계) 등 중간 집게값을 산출

: ORDERBY 구문으로 계층 내 정렬에 시용 가능. SQL 결과를 보다 체계적으로 보여줌.

:SELECT FROM GROUPBY 소계집계대상이 아닌 컬럼 ROLLUP 소계집계대상컬럼 HAVING ORDERBY..

 

CUBE: 결합가능한 모든 값에 다차원 집계를 생성.

: select from where groupby cube- havig- orderby...

 

GROUPING SETS: 집계대상 컬럼들에 대한 개별 집계. 컬럼간 순서와 무관한 결과를 얻을 수 있음.

: 다양한 소계집합을 만들 수 있음.

: order by를 사용해 집계 대상 그룹과의 표시순서를 조정해 체계적으로 보여줄 수 있음.

: select from where groupby- grouping sets-having- orderby...

 

3) 윈도 함수(=OLAP 함수)
: DB를 사용한 온라인 분석 처리용도로 사용하기 위해 표준 SQL에 추가된 기능.

: select over partition by order by -from

: partition by: 순위 정할 대상범위의 컬럼을 결정. partition by를 통해 구분된 레코드 집합을 윈도라함.

: 윈도함수에는 OVER문구가 필수적으로 포함됨.

: orderby 뒤에는 sort컬럼을 입력(어떤 열을 어떤 순서로 순위를 정할지 지정)

윈도함수분류 설명
순위함수 레코드의 순위를 계산하는 함수
RANK: 특정항목(컬럼)에 대한 순위. 동일 순위 레코드 존재시 후순위 넘어감(1,2,2,4,5)
DENSE_RANK: 레코드의 순위계산. 동일 순위의 레코드 존재시에도 후순위를 넘어가지 않음 (1,2,2,3,4)
ROW_NUMBER: 레코드순위계산. 동일 순위의 레코드 존재해도 무관하게 연속번호를 부여 (1,2,3,4,5)
행순서함수 레코드에서 가장 먼저 나오거나 가장 뒤에 나오는 값, 이전/이후 값들을 출력하는 함수
FIRST_VALUE(MIN과 동일)
LAST_VALUE(MAX와 동일)
LAG(파티션별 윈도에서 이전 로우값반환)
LEAD(파티션별 윈도서 이후 로우값 반환)

그룹 내 비율함수 백분율을 보여주거나 행 순서별 백분율 등 비율과 관련된 통계를 보여줌
RATIO_TO_REPORT: 합을 기준으로 각 로우의 상대적 비율을 반환. 결과값은 0~1범위를 가짐. OVER 괄호 안에 컬럼생략시 그룹은 테이블 전체가 대상
PERCENT_RANK: 주어진 그룹에 대해 제일 먼저 나오는 것을 0으로, 제일 늦게=1로 해, 값이아닌 행의 순서별 백분율을 구함. 결괏값은 0~1 범위를 가짐.

 

절차형 SQL 활용하기

-절차형 sql 종류

1) 프로시저: 일련 쿼리를 한 함수처럼 실행위한 쿼리집합

2) 사용자정의함수: 수행결과를 단일값으로 반환

3) 트리거: 삽입/갱신/삭제 등의 이벤트가 발생할 때마다 관련작업이 자동으로 수행됨.

 

출력부

1) DBMS_OUTPUT 패키지 개념

: 메시지를 버퍼에 저장하고 버퍼로부터 메시지를 읽어오기 위한 인터페이스 패키지

: 절차형 SQL이 정상구현되었는지 테스트목적으로 사용됨

DBMS_OUTPUT.PUT(문자열);

DBMS_OUTPUT.PUT_LINE(문자열);

 

제어부

1) 조건문

: IF(if 조건 then 문장; elsif 조건 then 문장;else 문장; endif;)

: 간단한 케이스문(case 변수 when 1 then set 명령어; when 2 then set 명령어; else set 명령어; end case;)

:검색된 케이스문(명확한 값 및 범위를 가지는 조건에 따라 여러 선택 경로중 하나를 취함): case 변수 when 조건1 then set 명령어; when 조건2 then set 명령어; else set 명령어; end case;

2) 반복문

: LOOP: LOOP 문장; EXIT WHEN 탈출조건; END LOOP;

: WHILE: WHILE 반복조건 LOOP 문장; EXIT WHEN 탈출조건; END LOOP;

: FOR LOOP: FOR 인덱스 IN 시작값..종료값 LOOP 문장; END LOOP;

 

예외부

: EXCEPTION WHEREN 조건 THEN SET 명령어;

 

프로시저

: 일련의 쿼리들을 한 함수처럼 실행위한 쿼리집합

1) 선언부: 프로시저 명칭, 변수, 인수, 데이터타입정의

2) 시작/종료부: 다수 실행을 제어하는 기본적 단위, 논리적 프로세스를 구성

3) 제어부: 기본적으로는 순차적 처리. 조건문과 반복문 이용해 문장 처리.

4) SQL: dml을 주로 사용. DDL TRUNCATE사용

5) 예외부: 예외 처리 방법 정의

6) 실행부: 프로시저에서 수행된 DML 수행내역의 DBMS 적용 또는 취소 여부 결정하는 처리부

 

프로시저 문법

CREATE [OR REPLACE] PROCEDURE 프로시저명

(파라미터명 [IN|OUT|INPUT] 데이터타입, ... )

IS

  변수선언

BEGEN

  명령어;

[COMMIT|ROLLBACK]

END;

 

구성 설명
[OR REPLACE] 기존 프로시저 존재시 현재 컴파일하는 내용으로 덮어씀.
모드
[IN|OUT|INOUT]
IN: OS에서 프로시저로 값전달
OUT: 프로시저에서 처리된결과 OS로 전달
INOUT: IN+OUT 동시 수행
BEGIN 프로시저 시작
COMMIT 트잭이 끝나고 DB일관성있는 상태에서 하나 트잭 끝낫을 때 사용하는 연산
ROLLBACK 재시작하거나 부분연산취소
END 프로시저 끝

프로시저 호출문 작성: SQL TOOL을 활용해 직접 실행시키는 경우 EXECUTE 또는 EXEC 명령어를 이용해 프로시저를 실행함.

프로시저에 입출력 변수가 존재하는 경우 변수를 입력하여 실행해야 함.

EXECUTE 프로시저명 (파라1, 파라2, ...)

 

- 사용자정의함수

: 일련의 SQL 처리를 수행하고 수행 결과를 단일 값으로 반환할 수 있는 절차형 SQL

: 기본사항은 프로시저와 동일, 반환부분만 다름.

: 반환되는 단일 값을 조회 /삽입/수정 작업에 이용함.

: 반환되는 값이 단일값이라는 것이 프로시저와 다름.

선언부, 시작/종료부(BEGIN, END). 제어부, SQL, 예외부, 반환부

CREATE [OR REPLACE] FUNCTION 함수명

(파라미터명 IN 데이터타입, ...)

RETURN 데이터타입

IS

  변수선언

BEGIN

  명령어;

  RETURN 변수;

END;

 

: 모드가 IN뿐임.

 

트리거: 이벤트는 전체트잭 대상과 각행에 의해 발생하는 경우 모두를 포함할 수 있으며, 테이블과 뷰, DB작업을 대상으로 정의할 수 있음.

목적: 특정 테이블에 대한 데이터 변경을 시작점으로 설정하고, 관련 작업을 자동 수행하기 위해 트리거 수행.

데이터 무결성 유지 및 로그 메시지 출력 등 별도처리를 위해 트리거를 사용함.

1) 행 트리거: 데이터 변화가 생길 때마다 실행

2) 문장트리거: 트리거에 의해 단 한번 실행

 

트리거의 구성

: 프로시저, 사용자정의함수와 기본 문법은 같음.

: 반환 값이 없고, DML을 주된목적으로 한다=프로시저와 유사

: EVENT 명령어를 통해 트리거 실행을 위한 이벤트를 인지, 외부변수 IN/OUT이 없는 점이 프로시저나 사용자정의함수와 다름.

: 선언부, 이벤트부, 시작/종료부, 제어부, SQL, 예외부

CREATE [OR REPLACE] TRIGGER 트리거명

[BEFORE|AFTER] 유형 ON 테이블명

[FOR EACH ROW]

BEGIN

END;

BEFORE: 테이블 명에 대한 INSERT/UPDATE/DELETE 수행하기 전에 트리거가 실행되도록 지정

AFTER: 성공적으로 수행되었을 경우에만 트리거실행

트리거 작성 시 주의사항

: TCL 사용불가.

: 오류주의. 오류발생시 트리거 실행의 원인을 제공한 데이터 작업에도 영향. 특정 테이블에 데이터 추가 후 발생하는 트리거에서 오류 발생 시 트리거 이후의 작업이 진행되지 않거나 데이터가 추가되지 않음.

 

데이터 조작 프로시저 최적화

데이터 조작 프로시저 성능개선

1) 쿼리 성능 개선(튜닝)

: DB 프로시저에 있는 SQL 실행계획을 분석, 수정 통해 최소시간으로 원하는 결과 얻도록 프로시저를 수정하는 작업. SQL 성능 개선을 통해 데이터 조작 프로시저의 성능 개선이 가능함.

2) 쿼리 성능 개선 절차

순서 절차 설명
1 문제있는 SQL식별 앱성능 관리 및 모니터링 도구인 APM 활용 (APM: 안정적 시스템 운영 위해 부하량, 접속자 파악 및 장애진단 목적으로하는 성능 모니터링 도구)
2 옵티마이저 통계 확인 옵티마이저: SQL을 효율적으로 수행할 최적처리경로를 생성해주는 DB핵심모듈
3 SQL문 재구성 범위가 아닌 특정값지정으로 범위줄여 처리속도 빠르게함.
옵티마이저가 비정상적 실행계획을 수립할 경우, 힌트로서 옵티마이저의 접근 경로 및 조인 순서 제어
4 인덱스 재구성 성능에 중요한 액세스 경로 고려해 인덱스 생성.
실행계획 검토해 기존 인덱스 열 순서 변경/추가
5 실행계획 유지관리 DB버전 업그레이드, 데이터 전환 등 시스템 환경의 변경 사항 발생시에도 실행계획이 유지되고 있는지 관리

 

3) 옵티마이저 통계확인

: 옵티마이저가 생성한 SQL 처리경로 = 실행계획

옵티마이저 유형

비교 규칙기반 옵티마이저(RBO) 비용기반 옵티마이저(CBO)
개념 통계정보 없는 상태에서 사전 등록된 규칙에 따라 질의 실행 계획을 선택하는 옵티마이저 통계정보로부터 모든 접근경로 고려한 질의실행 계획을 선택하는 옵티마이저
핵심 규칙(우선순위) 기반 비용(수행시간)기반
평가기준 인덱스 구조, 연산자, 조건절 형태 등 레코드개수, 블록개수, 평균행 길이, 컬럼 값 수, 컬럼값 분포, 인덱스 높이, 클러스터링 팩터 등
장점 사용자가 원하는 처리경로로 유도 쉬움 옵티마이저 이해도가 낮아도 성능보장 가능(기본 설정)

SQL 수행과정 내 옵티마이저 역할

: 비용기반 옵티마이저 기반으로 쿼리변환, 비용산정, 계획생성으로 구분됨.

서브엔진 역할
쿼리변환 SQL을 표준화된 형태로 변환
비용산정 쿼리명령어 각 단계의 선택도, 카디널리티, 비용을 계산
궁극적으로 실행계획 전체에 대한 총비용 계산
계획생성 한 쿼리 수행 시 후보군이 될 만한 실행계획들을 생성해내는 역할

힌트 사용

: SQL 성능 개선의 핵심으로, 옵티마이저의 실행계획을 원하는대로 변경할 수 있게 함.

:옵티마이저가 항상 최선의 실행계획을 수립할 수 없어 명시적 힌트를 통해 실행계획 변경.

SELECT /*+ RULE */ ENAME, SAL FROM EMP WHERE EMPNO >9000;

:비용기반 옵티마이저에서 규칙기반 옵티마이저 모드로 변경수행.

 

주요 옵티마이저 힌트

/*+RULE*/: 규칙기반 접근방식을 사용하도록 지정

/*+CHOOSE*/: 오라클 옵티마이저 디폴트값에 따름

/*+INDEX*/: 지정된 인덱스 강제적 사용

/*+USE_HASH(테이블명)*/: 테이블들의 조인이 HASH JOIN으로 일어나도록 유도

/*+USE_MERGE(테이블명)*/: 테이블들의 조인이 SORT MERGE 형식으로 일어나도록 유도

/*+USE_NL(테이블명)*/: 테이블들의 조인이 NESTED LOOP 형식으로 일어나도록 유도

 

- SQL문 재구성:

성능개선 위해 재구성 가이드를 참고해 쿼리를 재구성함.

1) 특정값 지정: 조건절>, < 가 아닌 =을 사용. 범위 아닌 특정값 지정으로 범위줄임

2) 별도의 SQL 사용: 다양한 작업에 대해 한 SQL문 사용 시 각 작업에 최적화되지 않은 결과 발생. 하나의 SQL문 사용시 UNION ALL 연산자 사용

3) 힌트사용

4) HAVING 미사용: 인덱스가 걸려있는 컬럼은 HAVING 사용시 인덱스 미사용

5) 인덱스만 질의 사용: 가능한 인덱스만 이용해 질의 수행해 옵티마이저가 최적경로 찾도록 유저

 

- 인덱스 재구성:

1) 자주쓰는 컬럼 선정

2) SORT 명령어 생략

3) 분포도 고려

4) 데이터 변경 적은 컬럼 선정

5) 결합 인덱스 사용

 

728x90
반응형
댓글