[Site Map]  [데이터베이스목차]

 

연관토픽

  1. [하위] DDL(Data Definition Language)
  2. [연관] NoSQL(Not Only SQL)
  3. [연관] 동적 쿼리(Dynamic SQL)

 

출제

[관리116-1]  

 

개념 [116관1교시] 

  • 사용자가 정의된 질의를 통하여 데이터베이스를 제어하고 관리할 수 있도록 해주는 표준 구조화 질의 언어
  • 관계 데이터베이스 관리시스템에서 자료 검색과 관리, 스키마 생성 및 수정, 객체 접근 조정관리를 위한 프로그래밍 언어
  • 관계 사상(relational mapping)을 기초로 한 입력 릴레이션(테이블)으로부터 원하는 출력 릴레이션을 사상(mapping)시키는 대표적인 언어
  • 사용자가 데이터베이스를 구축하고 이에 접근하기 위해 데이터베이스 관리 시스템과 통신하는 수단
  • 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어

 

 

 

SQL의 특징

특징 설명
스키마 관리 - 스키마 객체의 생성, 변경, 제거
관계형 언어 - 입력 릴레이션으로부터 원하는 출력 릴레이션으로 사상시키는 관계형 언어
데이터 관리 - 데이터베이스 질의, 데이터 삽입/갱신/삭제
SQL 표준 - SQL2(SQL92) : 관계형 데이터베이스 위한 언어
- SQL3(SQL99) : SQL2에 객체지향 개념 확장한 객체 관계형 데이터베이스 언어 

 

 

 

SQL 종류

  • 사용자와 데이터베이스 관리 시스템 간의 통신 수단
  • 사용 목적에 따라 데이터 정의어, 데이터 조작어, 데이터 제어어로 구분
구분 설명 SQL문
데이터 정의어(DDL)  - 테이블이나 관계의 구조를 생성하는데 사용
- 테이블을 생성하고 변경, 제거하는 기능 제공 
CREATE, ALTER, DROP 등 
데이터 조작어(DML)  - 테이블에 데이터를 검색, 삽입, 수정, 삭제
- 테이블에 새 데이터 삽입하거나, 테이블에 저장된 데이터 수정, 삭제, 검색 기능
SELECT, INSERT, DELETE, UPDATE 등 
데이터 제어어(DCL)  - 데이터의 사용 권한을 관리하는데 사용
- 데이터에 대한 접근 및 사용권한을 사용자별로 부여하거나 취소하는 기능
GRANT, REVOKE 등 

 

 

 

SQL 처리과정

  • SQL 처리는 구문분석, 실행, 인출(DML의 경우 생략) 과정으로 수행, 기 사용 SQL 문에 대해서는 Shared Pool의 기 사용 내역 검색을 통해 과정 간소화
구분 처리과정 설명 비고
구문분석
(parsing)
Syntax Check SQL 문장의 구문 분석 Parpared Statement에서는 생략
Semantic Check SQL 문장의 의미 및 문법적 적절성 체크
Shared Pool Check 쿼리에 사용된 테이블, 컬럼, 뷰 등 존재 여부확인
Optimization 쿼리 수행을 위한 최적의 실행방법 선택(RBO/CBO)
Execution Plan 쿼리 실행 계획 수립
실행
(Execution)
캐쉬 데이터 검색 메모리 영역의 데이터베이스 캐쉬영역을 검색하여 해당 객체가 존재하는지 확인 Cache Database file
데이터 파일 검색 캐쉬 내에 존재하지 않는 경우, 데이터베이스 파일을 검색하여 해당 데이터를 캐쉬 영역에 저장
인출(fetch) 데이터 인출 관련 테이블 데이터를 처리하여 사용자에게 전송 DML 생략

 

 

 

 

SQL 수행요소

 구분 역할 
Parser  - SQL 문장을 이루는 개별 구성요소를 분석하고 파싱해서 파싱 트리 생성
- SQL 문법적 오류, 의미상 오류 확인 
 Optimizer Query Transformer  - 파싱된 SQL을 일반적이고 표준적인 형태로 변환 
Estimator  - 쿼리 수행 각 단계의 선택도, 카디널리티, 비용을 계산하고 실행계획 전체의 총 비용을 계산 
Plan Generator  - 하나의 쿼리를 수행하는데 있어, 후보군이 될만한 실행게획들을 생성 
Row-Source Generator  - 옵티마이저가 생성한 실행계획을 SQL 엔진이 실제 실행할 수 있는 코드 형태로 생성 
SQL Engine  - SQL 실행 

 

 

 

SQL 수행 성능향상 절차

  • 데이터 모델의 확인과 인덱스 유효성이 선행된 이후 테이블 조인의 최적 플랜을 검증하여 SQL 수행 성능을 향상함

 

 

 

SQL 수행 성능향상 기법

구분 설명 예시
옵티마이저 옵티마이저의 목표: SQL로 요구된 결과를 최소의 비용으로 처리할 수 있는 처리경로를 결정
- SQL은 처리절차를 기술한 것이 아니라 결과에 대한 요구일 뿐임.
-
새로운 길을 만드는 것이 아니라 이미 존재하는 길을 단지 찾아줄 뿐임 -사용자가 부여한 영향요소(:힌트)에 따라 논리적으로 존재하는 최적은 달라짐. -동일한 결과를 얻을 수 있는 경로는 많으나 효율성의 차이는 큼.
-
옵티마이져는 절대 전지전능하지 않음.
 
힌트(hint) 사용 - 옵티마이저가 항상 최적화된 실행계획을 수립하는 것은 아니므로 힌트를 사용하여 원하는 실행계획으로 유도 SELECT /*+ hint [ { hint } ... ] */
부분범위 처리 - 조건을 만족하는 전체집합이 아닌 일부분만 액세스하고도 결과를 리턴 할 수 있도록 하여 온라인 프로그램에서 응답시간(Response Time)을 최소화 할 수 있음 - 인덱스를 이용해서 sort 대체
- 인덱스만으로 액세스해도 되는 구조를 만듦 - max값을 구할 경우 인덱스 이용
- exists 활용
- rownum 활용
인덱스 활용 - 인덱스가 있음에도 불구하고 SQL을 잘못 기술함으로써 무용지물로 만드는 오류를 없애야 함 인덱스 활용을 위해 아래 경우 배제 
- 인덱스 칼럼의 변형
- not operator
- null, not null 
사용
조인방식/조인순서 - 동일한 SQL문이라도 조인방식과 조인순서에 따라 처리속도는 매우 큰 차이를 가져올 수 있으므로 작성한 SQL이 어떤 실행계획으로 수립되는 지 반드시 확인 후 조정  
다중처리
(array processing)
- 배치작업의 경우 한번의 DBMS호출로 여러 건을 동시에 처리할 수 있는 다중처리 활용  
병렬쿼리
(parallel query)
- 배치작업의 경우 하나의 SQL을 여러 개의 CPU가 병렬로 분할 처리하게 함으로써 처리속도 향상 가져옴 Insert /*+ parallel(member_tmp,8)*/ into member_tmp Select /*+ parallel(member,8)*/ from member;
Dynamic SQL 지양 - 조건절에 입력된 값을 먼저 Binding 한 후 실행계획을 수립하는 Dynamic SQL은 파싱 부하가 커지므로 입력 값을 Binding 하기 전에 실행계획을 수립하는 Static SQL을 가급적 사용하도록 함 Select * From Tab Where Col1 = 1; Select * From Tab Where Col1 = 2; Select * From Tab Where Col1 = 3;

Select * From Tab Where Col1 = :v1;

 

 

 

Statement와 Prepared Statement 방식 비교

구분 Statement Prepared Statement
개념 쿼리 실행시, 쿼리분석 -> 컴파일 -> 실행 과정 매번 진행 쿼리 실행시, 쿼리분석 -> 컴파일 -> 실행 과정을 최초 한번만 수행 후 캐쉬 저장 재사용
처리형태 일반 SQL 처리 Bind SQL
저장 없음 Library Cache 저장
파싱형태 Soft Parsing Soft Parsing
재사용 없음 Cache 저장, 재사용
특징 실행시 마다 쿼리 실행과정 수행 쿼리 실행과정 최소 1회 수행
장점 SQL 문장 파악 용이 동일 쿼리 반복 시 최적화
단점 SQL 수행시 매번 컴파일 진행 Where절이 가변적, SQL 확인 어려움
특이사항 성능 이슈 발생 가능 보안 강화, 안정적
실행절차

 

 

 

모범답안

  1. [답안] SQL 처리과정, Statement와 Prepared Statement 비교 (2교시)
  2. [답안] SQL처리과정, Statement방식과 Prepared statement 비교 (2교시)

 

 

 

 

 

 

+ Recent posts