4세대 언어는 기존 3세대 언어의 프로그램 카운터의 접근 방법을 변경시켜, 프로그램의 흐름 제어에 관한 주된 일을 컴퓨터 전문가에게서 컴퓨터 소프트웨어로 변경시켰다. 즉, 연산 결과를 얻기 위한 action을 지정하고 프로그래밍 하는것이 아닌 사용자는 결과를(result)를 컴퓨터에 요청하고 컴퓨터는 내부 프로세스를 통해 자동 프로그래밍 하여 결과값을 출력하여준다. 따라서 4세대 언어를 문제 해결형(problem solving)언어, 또는 비절차적(nonprocedural)언어라고 하는데, 기술적으로 보면 키보드 등에서 입력한 데이타 등을 의사코드로 변환시키고 이것을 다시 기계코드로 고쳐 실행시키는 언어이다.
이처럼 4세대 언어인 SQL언어 또한 결과 집합을 받기 위해서 우리는 select절에 출력하고자하는 컬럼을 지정해주고 FROM절에 어떤 테이블에서 가지고올지 WHERE에서 어떤조건값에 해당하는 데이터들을 가지고 와야할지에 대해 지정하여 내가 원하는 결과는 이러한 조건의 집합결과다 라고 DBMS에 요청을 하고 이요청을 받은 DBMS는 필요한 프로시저를 내부에서 자동으로 프로그래밍하여 결과집합을 내보내준다.
SQL에 대한 결과집합을 대신 프로그래밍 해주는 존재가 DBMS에 존재하는데 이것이 바로 SQL옵티마이저이다.
SQL을 가장 빠르고 효율적으로 수행할 최적의 처리경로를 생성해주는 DBMS의 핵심 엔진으로 이해하면 된다.
옵티마이저의 최적화 수행단계
1.사용자가 던진 쿼리수행을 위해 후보군이 될만한 실행계획들을 찾아낸다.
2.데이터 딕셔너리에 미리 수지해 놓은 오브젝트 통계 및 시스템 통계쩡보를 이용해 각 실행계획의 예상비용을 산정한다.
3.각 실행계획의 비용을 비교해서 최소비용을 갖는 하나를 선택한다.
위 작업을 진행중 SQL을 파싱하고 ,최적화를 수행하며 이러한 일련의 행위들은 모두 서버 프로세스가 처리해 준다.
이처럼 옵티마이저가 사용자에게서 SQL을 받고 최적화 수행 단계를 걸쳐 사용자가 확인할수 있도록 트리구조로 표현한 것이 실행 계획(Excution Plan)이다.
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=310 Card=178 Bytes =15308)
1 0 NESTED LOOPS (OUTER) (Cost=310 Card=178 Bytes=15308)
2 1 TABLE ACCESS (FULL) OF 'OBJ$' (TABLE) (Cost=131 Card=178 Bytes=14062)
3 1 TABLE ACCESS (CLUSTER) OF 'TAB$' (CLUSTER) (Cost=1 Card=1 Bytes=7)
4 3 INDEX (UNIQUE SCAN) OF 'I_OBJ#' (INDEX) (Cost=0 Card=1 )