제 13 장 질의 처리와 최적화를 위한 알고리즘 Fundamentals of Database Systems 제 13 장 질의 처리와 최적화를 위한 알고리즘 Fundamentals of Database Systems R. A. Elmasri and S. B. Navathe Copyright© 2004 황규영 홍의경 음두헌 박영철 김진호 조완섭
Fundamentals of Database Systems 목 차 13.1 SQL 질의를 관계대수로 번역 13.2 외부 정렬 알고리즘 13.3 실렉트와 조인 연산을 위한 알고리즘 13.4 프로젝트와 집합 연산을 위한 알고리즘 13.5 집계 연산과 외부 조인의 구현 13.6 파이프라이닝을 사용한 연산의 결합 13.7 경험을 사용한 질의 최적화 13.8 질의 최적화에서 선택률과 비용 추정치 사용 13.9 오라클의 질의 최적화의 개요 13.10 의미적 질의 최적화 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 개 요 어휘 분석, 구문 분석, 검증 고수준 언어로 표현된 질의 질의를 중간 형태로 표현 실행 계획 질의를 실행하기 위한 코드 질의 결과 질의 최적화 질의 코드 생성기 런타임 데이타베이스 처리기 코드는 직접 실행되거나 (인터프리터 방식), 저장된 뒤 필요할 때마다 실행될 수 있음 (컴파일 방식) [그림 13.1] 고수준의 질의를 처리하는 과정 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.1 SQL 질의를 관계대수로 번역 SQL 질의를 최적화 하기 위한 준비 단계 예제 SQL 질의 SELECT LNAME,FNAME FROM EMPLOYEE WHERE SALARY > (SELECT MAX(SALARY) FROM EMPLOYEE WHERE DNO = 5); (2) 질의 블록들로 분해: 외부블록 : SELECT LNAME,FNAME FROM EMPLOYEE WHERE SALARY > C 내부블록: SELECT MAX(SALARY) FROM EMPLOYEE WHERE DNO = 5 (3) 관계대수로 번역: 외부블록:πLNAME, FNAME(σSALARY>C(EMPLOYEE)) 내부블록: MAX SALARY (σDNO=5(EMPLOYEE) // 확장된 관계대수식 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.2 외부 정렬 필요성 ORDER BY 절, SELECT 절의 DISTINCT, 조인 연산, 집합 연산의 처리에서 사용됨 합병정렬( Mergesort)알고리즘 정렬 단계 Read RUN; Sort; Write RUN 합병 단계 4-way 합병 (4개의 RUN들을 합병하여 하나의 RUN을 생성) 하나의 RUN으로 될 때 까지 합병을 반복 수행함 블록접근 회수 : Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.3 실렉트와 조인 연산을 위한 알고리즘 13.3.1 실렉트 연산의 구현 13.3.2 조인 연산의 구현 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.3.1 실렉트 연산의 구현 단순 선택을 위한 검색 방법 화일 스캔 S1. 선형 탐색(linear search) S2. 이진 탐색(binary search) : 순서 키에 대해 동등 비교시 인덱스 스캔 S3. 기본 인덱스나 해시 키를 사용하여 단일 레코드를 검색 S4. 기본 인덱스를 사용하여 여러개의 레코드들을 검색 . 기본 키에 대한 범위 검색시 S5. 클러스터링 인덱스를 사용하여 여러개의 레코드들을 검색 S6. 보조(B+-트리) 인텍스를 사용 . 인덱싱 필드가 키이면 하나의 레코드 탐색 . 인덱싱 필드가 키가 아니면 여러 레코드 탐색 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.3.1 실렉트 연산의 구현 (cont.) 복합 선택을 위한 검색 방법 논리곱 조건인 경우 : 인덱스를 이용하여 레코드 포인터들을 구하고 이들을 통해 레코드들을 읽어서 다른 조건들을 비교함 S7. 개별 인덱스를 사용하는 논리곱 선택(conjunctive selection) S8. 복합 인덱스를 사용하는 논리곱 선택 S9. 보조 인덱스를 사용하여 레코드 포인터들의 교집합에 의한 논리곱 선택 % 선택률(조건을 만족하는 투플수를 릴레이션의 전체 투플수로 나눈 값)에 따라 인덱스를 선택함. 논리합 조건인 경우 : 각 조건을 만족하는 레코드들의 합집합 방법 1. 단순 조건들 중 어느 하나라도 접근경로를 가지지 않으면 선형 탐색 방법을 사용할 수 밖에 없음 방법 2. 각 조건을 만족하는 레코드 포인터들의 합집합을 구하여 레코드들을 읽음 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.3.2 조인 연산의 구현 J1 : 중첩 루프 조인(nested loop join 또는 inner-outer loop join) R(외부 루프)의 각 레코드에 대해 S(내부 루프)의 모든 레코드를 검색하고, 두 레코드가 조인조건을 만족하는가를 테스트한다. J2 : 단일 루프 조인(single loop join) R에 있는 각 레코드에 대해, 인덱스를 사용하여 S의 레코드들 중에서 조인 조건을 만족하는 모든 레코드들을 검색한다. Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.3.2 조인 연산의 구현 (cont.) J3 : 정렬-합병 조인(sort-merge) R과 S의 모든 레코드들을 조인 애트리뷰트를 기반으로 정렬한 후, R과 S의 화일 블록들의 쌍을 순서대로 읽어서 조인 조건을 테스트한다. J4: 해시조인(hash join) 분할단계 : R의 레코드들을 해시 화일 버켓들로 해시한다. 조사단계: S의 각 레코드를 해시하여 동일한 해시주소를 갖는 각 버켓에 속하는 R과 S의 레코드들이 조인조건을 만족하면 결합한다 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.4 프로젝트와 집합 연산의 구현 ∏<attribute list> (R) <attribute list>가 R의 키를 포함할 경우 <attribute list>가 R의 키를 포함하지 않을 경우 연산의 결과를 정렬한 다음 중복된 투플을 제거 또는 해싱을 이용하여 중복 제거 합집합, 교집합, 차집합 : 합집합 호환성 릴레이션들에만 적용 동일한 애트리뷰트들에 대해 두 릴레이션들을 정렬 후 각 릴레이션을 한번 조사하는 것으로 결과를 산출 한 릴레이션을 해싱한 후 다른 릴레이션의 투플을 해싱하여 집한 연산 구현 카티션 프로덕트(R X S) 구현 비용이 비싸므로 질의 최적화 동안 연산을 피하고 동등한 연산으로 대치 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.5 집계 연산과 외부 조인의 구현 집계 연산자 : MIN, MAX, COUNT, AVERAGE, SUM SELECT MAX(SALARY) FROM EMPLOYEE; SALARY에 대하여 인덱스가 있는 경우 : 그 인덱스에서 가장 큰 값을 탐색 SALARY에 대해 인덱스가 없는 경우 : 화일 스캔을 해야 함 count, average, sum 연산 : 밀집 인덱스가 있는 경우 인덱스에서 처리 SELECT DNO, AVG(SALARY) FROM EMPLOYEE GROUP BY DNO; 정렬하거나 해슁을 이용하여 투플들을 각 그룹으로 분할하여 그룹들을 생성한 후, 각 그룹에서 집계함 그룹 애트리뷰트에 클러스터링 인덱스가 존재할 경우, 분할 단계 필요 없음 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.5 집계 연산과 외부 조인의 구현(cont) 외부 조인 조인에 참여하지 않는 투플은 상대방 투플을 널로 채워서 조인함 방법1 : 내부 조인 알고리즘을 수정하여 구현 방법2 : 관계 대수 연산자들의 조합을 통하여 구현 효율성 낮음 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.6 파이프라이닝을 사용한 연산의 결합 이 기법은 질의 처리 도중에 생성되는 임시 결과 화일의 수를 줄이는 것이 목적임 하나의 연산의 결과를 임시 화일에 저장하는 대신에 다음 연산의 입력으로 사용하는 것이 파이프라이닝의 기본 아이디어임 예: Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.7 경험을 사용한 질의 최적화 성능 향상을 위한 경험적 규칙들 예: 조인을 수행하기 전에 실렉트나 프로젝트 연산을 수행한다. 경험적 규칙들의 적용대상 질의에 대하여 파서가 생성한 초기 내부 표현 : 질의 트리 또는 질의 그래프 질의 트리 : 관계대수 혹은 확장된 관계대수식을 표현하는데 사용 질의그래프: 관계해석식을 표현하는데 사용 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.7.1 질의 트리와 질의 그래프의 표시법 질의 트리 : 관계대수식의 내부 표현 질의트리의 구조 리프노드 : 질의의 입력 릴레이션들 내부노드 : 관계대수 연산들 질의 트리의 실행 트리는 질의에 포함된 연산들의 처리 순서를 나타낸다. 내부노드의 연산에 대해 피연산자가 사용 가능할 때마다 그 연산을 실행하고, 그 연산의 결과로 생성된 릴레이션으로 그 내부노드를 대치한다. 루트노드가 실행되어 질의에 대한 최종 결과 릴레이션이 생성되면 실행이 끝난다. Ch13 Fundamentals of Database Systems
13.7.1 질의 트리와 질의 그래프의 표시법 (cont.) 질의 그래프 : 관계해석식을 표현하는 자료구조 질의그래프의 구조 릴레이션 노드 : 질의의 입력 릴레이션들 한겹 원으로 표시 상수 노드 : 질의의 상수값들 이중 원으로 표시 그래프 에지 : 실렉션과 조인 조건들 각 릴레이션으로 부터 검색할 애트리뷰트들 : 꺽쇠 기호안에 표시 질의그래프의 실행 질의를 실행하기 위한 연산들의 특정 순서를 나타내지 않는다. 각 질의에 대응되는 질의그래프는 유일하다. Ch13 Fundamentals of Database Systems
13.7.1 질의 트리와 질의 그래프의 표시법(cont.) 관계 대수 표현 SQL 표현 SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND PLOCATION=‘Stafford’ ∏ PNUMBER, DNUM,LNAME,ADDRESS,BDATE(((σ PLOCATION=‘Stafford’(PROJECT)) DNUM=DNUMBER(DEPARTMENT)) MGRSSN = SSN(EMPLOYEE)) Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems ∏ PNUMBER, DNUM,LNAME,ADDRESS,BDATE MGRSSN = SSN EMPLOYEE DNUM=DNUMBER DEPARTMENT σPLOCATION=‘Stafford’ PROJECT (a) [그림 16.3] 질의 Q2에 대한 두 개의 질의트리 (a) Q2의 관계대수식에 대응되는 질의 트리 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems ∏ PNUMBER, DNUM,LNAME,ADDRESS,BDATE σDNUM=DNUMBER AND MGRSSN=SSN AND PLOCATION=‘Stafford’ EMPLOYEE DEPARTMENT PROJECT X [그림 16.4] 질의 Q2에 대한 두 개의 질의트리 (cont.) (b) Q2의 SQL 질의에 대한 초기 (규준) 질의 트리 (b) Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems P [그림 16.4] (c) Q2의 SQL 질의에 대한 질의 그래프 (c) ‘Stafford’ [P.PNUMBER,P.DNUM] D.MGRSSN=E.SSN [E.LNAME,E.ADDRESS,E.BDATE] P.PLOCATION=‘Stafford’ P.DNUM=D.NUMBER Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.7.2 질의트리의 경험적 최적화 질의 Q SELECT LNAME FROM EMPLOYEE, WORKS_ON, PROJECT WHERE PNAME = ‘Aquarius’ AND PNUMBER = PNO AND ESSN = SSN AND BDATE > ‘1957-12-31’; Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.7.2 질의트리의 경험적 최적화(2) ∏ LNAME σPNAME=‘Aquarius’ AND PNUMBER=PNO AND ESSN=SSN AND BDATE>’1957-12-31’ PROJECT WORKS_ON X [그림 16.5] 경험적 최적화 과정에서 질의 트리를 변경하는 과정 (a) SQL 질의 Q에 대한 초기 (규준) 질의트리. (a) EMPLOYEE Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.7.2 질의트리의 경험적 최적화(3) ∏ LNAME σPNUMBER=PNO PROJECT WORKS_ON X [그림 16.5] 경험적 최적화 과정에서 질의 트리를 변경하는 과정 (b) 실렉트 연산들을 질의트리의 아래로 이동. (b) EMPLOYEE σPNAME=‘Aquarius’ σESSN=SSN σBDATE>’1957-12-31’ Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.7.2 질의트리의 경험적 최적화(4) ∏ LNAME σPNUMBER=PNO WORKS_ON X [그림 16.5] 경험적 최적화 과정에서 질의 트리를 변경하는 과정 (c) 보다 제한적인 실렉트 연산을 먼저 적용. (c) EMPLOYEE σBDATE>’1957-12-31’ σESSN=SSN σPNAME=‘Aquarius’ PROJECT Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.7.2 질의트리의 경험적 최적화(5) ∏ LNAME PNUMBER=PNO WORKS_ON [그림 16.5] 경험적 최적화 과정에서 질의 트리를 변경하는 과정 (d) 카티션 프로덕트와 실렉트를 조인 연산으로 대체. (d) EMPLOYEE σBDATE>’1957-12-31’ σPNAME=‘Aquarius’ PROJECT ESSN = SSN Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.7.2 질의트리의 경험적 최적화 ∏ ESSN PNUMBER=PNO WORKS_ON (e) EMPLOYEE σBDATE>’1957-12-31’ σPNAME=‘Aquarius’ PROJECT ESSN = SSN ∏ LNAME ∏ SSN,LNAME ∏ PNUMBER ∏ ESSN,PNO [그림 16.5] 경험적 최적화 과정에서 질의 트리를 변경하는 과정 (e) 프로젝트 연산들을 질의트리의 아래로 이동. Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.7.2 질의트리의 경험적 최적화 관계 대수 연산들을 위한 일반적인 변환 규칙 규칙 1. 연속적인 σ σc1 AND c2 AND...AND cn(R) ≡ σc1(σc2(...(σcn(R))...)) 규칙 2. σ의 교환법칙 σc1(σc2(R)) ≡ σc2(σc1(R)) 규칙 3. 연속적인 ∏ ∏List1(∏List2(...(∏Listn(R))...)) ≡ ∏List1(R) 규칙 4. σ와 ∏의 교환 ∏A1,A2,...,An(σc(R)) ≡ σc(∏A1,A2,...,An(R)) 규칙 5. (혹은 X)의 교환법칙 R cS ≡ S cR 규칙 6. σ와 (혹은 X)의 교환 σc(R S) ≡ (σc(R)) S Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.7.2 경험을 사용한 질의 최적화(cont.) 규칙 7. ∏와 (혹은 X)의 교환 ∏L(R cS) ≡ (∏A1,...,An(R)) c(∏B1,...,Bm(S)) 규칙 8. 집합연산의 교환법칙 ∪와 ∩사이에는 교환법칙이 성립한다. 그러나 연산에는 교환법칙이 성립하지 않는다. 규칙 9. , X, ∪, ∩의 결합법칙 (R Θ S) Θ T ≡ R Θ (S Θ T) 규칙 10. σ와 집합연산의 교환 ∪, ∩, - 와 σ 는 교환 가능하다. 규칙 11. ∏와 ∪의 교환 ∏L(R U S) ≡ (∏L(R)) U (∏L(S)) 규칙 12. 일련의 (σ, ×) 연산을 로 변환 σc(R X S ) ≡ (R c S) 그 밖의 다른 변환들 - 드모르강의 법칙 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.7.2 경험을 사용한 질의 최적화(cont.) 경험적 대수 최적화 알고리즘의 개요 논리곱 조건을 가진 실렉트 연산을 개개의 실렉트 연산들의 연속으로 분리 (규칙 1 사용) 실렉트 연산을 질의트리의 가장 아래로 이동 (규칙 2, 4, 6, 10 사용) 가장 제한적인 실렉트 연산들을 가진 리프노드 릴레이션들이 가장 먼저 실행되게 재배치함 (규칙 5, 9 사용) 카티션 프로덕트 연산을 후속 실렉트 연산과 결합하여 조인연산으로 변환 프로젝트 연산의 애트리뷰트들의 리스트를 나눠서 가능한 한 트리의 아래로 이동 (규칙 3, 4, 7, 11 사용) 단일 알고리즘에 의해 독립적으로 실행될 수 있는 연산들의 그룹을 나타내는 서브트리들을 식별함 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.7.3 질의트리를 질의 실행계획으로 변경 ∏ FNAME,LNAME,ADDRESS DNUMBER=DNO σDNAME=‘Research’ EMPLOYEE DEPARTMENT [그림 16.6] 질의 Q1에 대한 질의트리 최적화기의 실행계획: (1) 실렉트 연산 : 인덱스 스캔, (2) EMPLOYEE : 테이블 스캔, (3) 조인 연산 : 중첩 루프 조인, (4) 프로젝트 : 조인 결과를 스캔 (5) 질의 실행방법 : 구체화 평가방법 / 파이프라인 평가방법 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.8 질의 최적화에서 선택률과 비용추정치 사용 13.8.1 질의 실행을 위한 비용의 구성요소 13.8.2 비용함수에서 사용되는 카탈로그 정보 13.8.3 실렉트에 대한 비용함수의 예 13.8.4 조인에 대한 비용함수의 예 13.8.5 다중 릴레이션 질의와 조인 순서화 13.8.6 비용기반 질의 최적화의 예 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.8.1 질의 실행을 위한 비용의 구성요소 보조 기억장치의 접근 비용 디스크의 데이타 블록을 찾고, 읽고, 쓰는 비용 정렬, 해싱, 기본 인덱스, 보조 인덱스 등에 따라 다름 저장 비용 질의의 실행 전략에 따라 생성되는 중간 화일들의 저장 비용 계산 비용 질의 실행 단계에서 연산 수행 비용 레코드 탐색, 정렬, 조인을 위한 합병, 필드값 계산 등 메모리 사용 비용 질의를 실행하는 동안 필요한 메모리 버퍼의 갯수 통신 비용 질의와 질의 결과의 전송 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.8.2 비용 함수에서 사용되는 카탈로그 정보 r(record) : 레코드(투플)의 수 b(blocks) : 블록의 수 bfr(blocking factor) : 화일의 블록킹 인수 x : 다단계 인덱스 (기본 인덱스, 보조 인덱스, 또는 클러스터링 인덱스)의 단계수 b11 : 첫 번째 단계의 인덱스 블록의 수 d : 인덱싱 애트리뷰트에 나타나는 상이한 값들의 수 한 애트리뷰트의 s(selection cardinality) 추정에 사용됨 s : 한 애트리뷰트에 대한 동등조건을 만족시키는 레코드의 평균 갯수 키 애트리뷰트에 대해, s = 1 키가 아닌 애트리뷰트에 대해, s = r/d Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.8.3 실렉트에 대한 비용함수의 예 S1. 선형탐색 CS1a = b 조건을 만족하는 레코드가 있는 경우 CS1b = b/2 조건을 만족하는 레코드가 없는 경우 S2. 이진탐색 CS2 = log2b + s/bfr -1 키 애트리뷰트에 대한 동등조건인 경우 : log2b S3. 기본 인덱스(S3a) 또는 해시 키(S3b)를 사용하여 단일 레코드를 검색 CS3a = x + 1 기본 인덱스 CS3b = 1 해시 S4. 순서화된 인덱스를 사용하여 여러 개의 레코드들을 검색 CS4 = x + b/2 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.8.3 실렉트에 대한 비용함수의 예 (cont.) S5. 클러스터링 인덱스를 사용하여 여러 개의 레코드들을 검색 CS5 = x + s/bfr S6. 보조(B+-트리) 인덱스 사용 CS6a = x + s 동등 비교의 경우 CS6b = x + b11/2 + r/2 범위 질의의 경우 S7. 논리곱 선택 S1을 사용하거나 S2부터 S6까지 중 한 가지 방법을 사용한다. S8. 복합 인덱스를 사용하는 논리곱 선택 인덱스의 유형에 따라 S3a, S5, 또는 S6a와 같다. Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.8.4 조인에 대한 비용함수의 예 조인 선택도 (join selectivity, js) : 카티션 프로덕트 화일의 크기(투플 수)에 대한 조인 화일의 크기의 비율 js = |R c S| / |R × S| = |R c S| / (|R|*|S|) J1. 중첩 루프 방법 CJ1 = bR + (bR * bS) + ((js * |R| * |S|)/bfrRS) J2. 부합되는 레코드들을 검색하기 위한 접근구조 사용 CJ2a = bR + (|R| * (xB + sB)) + ((js * |R| * |S|)/bfrRS) CJ2b = bR + (|R| * (xB + sB//bfrB)) + ((js * |R| * |S|)/bfrRS) CJ2c = bR + (|R| * (xB + 1)) + (js * |R| * |S|)/bfrRS) CJ2d = bR + (|R| * h) + ((js * |R| * |S|)/bfrRS) J3. 정렬-합병 조인 CJ3a = bR + bS + ((js * |R| * |S|)/bfrRS) CJ3b = k * ((bR*log2bR) + (bS*log2bS)) + bR + bS + ((js * |R| * |S|)/bfrRS) Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.8.5 다중 릴레이션 질의와 조인 순서화 R4 R3 R2 R1 [그림 16.7] 두개의 좌방향 깊이 (조인) 질의 트리 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.9 ORACLE에서 질의 최적화의 개요 규칙기반 질의 최적화 15개의 서열화된 접근 경로를 유지 전체 테이블 스캔(가장 비효율적인) … ROWID를 사용한 테이블 접근(가장 효율적임) 낮은 서열일수록 보다 효율적인 방식을 의미한다. 비용기반 질의 최적화 여러 접근 경로들과 연산자 알고리즘들을 조사하고 가장 작은 추정 비용을 가지는 실행 계획을 선택한다. I/O, CPU 시간, 필요한 주기억장치 등 자원의 사용 추정치를 기초로 비용을 계산한다 Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 13.10 의미적 질의 최적화 데이타베이스 스키마에 명시된 제약조건 사용한 질의 최적화 예제 SELECT E.LNAME, M.LNAME FROM EMPLOYEE E M WHERE E.SUPERSSN = M.SSN AND E.SALARY > M.SALARY 질의의 의미 : 상사보다 더 많은 봉급을 받는 사원의 이름 제약조건: 어떤 사원도 자신의 상사보다 더 많은 급여를 받을 수 없다. 결론 : 위 질의를 수행할 필요가 없다. Ch13 Fundamentals of Database Systems
Fundamentals of Database Systems 요 약 SQL 질의 처리 관계대수로 번역하여 질의 최적화를 수행한 후, 최적의 처리 전략으로 처리함 질의 연산들을 실행하기 위한 기본 알고리즘들 외부정렬, 실렉트, 조인, 프로젝션, 집계함수, 집합연산, 외부조인, 파이프라인 처리 경험을 사용한 질의 최적화 질의 처리에 유용한 경험의 소개와 질의 최적화 예 질의 최적화에서 선택도와 비용추정치 계산 ORACLE에서 질의 최적화의 개요 의미적 질의 최적화 Ch13 Fundamentals of Database Systems