티스토리 뷰
데이터베이스 기본
트랜잭션
: 비인가자로부터 데이터 보장위해 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 조건식
groupby는 null값 row는 제외함.
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) 결합 인덱스 사용
'도구 > Etc' 카테고리의 다른 글
[2021 정보처리기사 실기] 12. 소프트웨어 개발 보안 구축 (0) | 2021.07.12 |
---|---|
[2021 정보처리기사 실기] 11. 서버 프로그램 구현 (0) | 2021.07.06 |
[2021 정보처리기사 실기] 9.프로그래밍 언어 활용 (0) | 2021.07.05 |
[2021 정보처리기사 실기] 8. 인터페이스 구현 (0) | 2021.07.05 |
[2021 정보처리기사 실기] 7. 통합 구현 (0) | 2021.07.04 |