Basic Concepts
Basic Concepts (Cont.)
- 평가 계획 (실행 계획)은 각 작업에서 사용되는 알고리즘과 작업 실행이 조정되는 방식을 정확히 정의한다.
Basic Concepts (Cont.)
-
두 relaitonal algebra 식이 모든 적법한 데이터베이스 인스턴스에서 동일한 튜플 세트를 생성하는 경우 두 relational algebra 표현식이 동등하다고 한다.
-
SQL 에서, 입력과 출력은 튜플의 다중 집합이다.
- relational algebra의 다중 집합 버전에 있는 두 표현식은 두 식이 모든 유효한 데이터 베이스 인스턴스에서 동일한 다중 집합 튜플을 생성하는 경우 동등하다고 한다.
-
등가 규칙(equivalence rule)은 두 형식의 표현이 동등하다고 말한다.
- 첫 번째 형식의 표현을 두 번째 형식으로 바꾸거나 그 반대로 바꿀 수 있다.
Equivalence Rules
-
conjunctive selection 연산은 일련의 개별 selection으로 분해될 수 있다.
σθ1∧θ2(E)=σθ1(σθ2(E))
-
selection 연산은 교환법칙이 성립한다.
σθ1(σθ2(E))=σθ2(σθ1(E))
-
일련의 projection 작업 중 마지막 작업만 필요하며 나머지는 생략할 수 있다.
πL1(πL2(...πLn(E))...))=πL1(E)
-
selection은 Cartesian product 및 세타 조인과 결합될 수 있다.
σθ(E1XE2)=E1⋈θE2
σθ1(E1⋈θ2E2)=E1⋈θ1∧θ2E2
-
세타 조인 연산(그리고 natural join)은 교환법칙이 성립한다.
E1⋈θE2=E2⋈θE1
-
(a) natural join 연산은 결합 법칙이 성립한다.
(E1⋈E2)⋈E3=E1⋈(E2⋈E3)
(b) 세타 조인은 다음과 같은 방식으로 결합된다.
(E1⋈θ1E2)⋈θ2∧θ3E3=E1⋈θ1∧θ3(E2⋈θ2E3)
→ 여기서 θ2 는 오직 E2 와 E3 의 속성만을 포함한다.
Pictorial Depiction of Equivalence Rules
Equivalence Rules (Cont.)
-
selection 연산은 다음 두 가지 조건에서 세타 조인 연산을 통해 분배된다.
- θ0 의 모든 속성이 조인되는 식 (E1) 중 하나의 속성만 포함하는 경우
σθ0(E1⋈θE2)=(σθ0(E1))⋈θE2
b. θ1이 E1의 속성만 포함하고 θ2가 E2의 속성만 포함하는 경우
σθ1∧θ2(E1⋈θE2)=(σθ1(E1))⋈θ(σθ2(E2))
Equivalence Rules (Cont.)
-
projection 연산은 세타 조인 연산에 다음과 같이 분배된다.
- θ가 L1∪L2의 속성만 포함하는 경우:
πL1∪L2(E1⋈θE2)=πL1(E1))⋈θ(πL2(E2)))
L1과 L2는 각각 E1와 E2의 속성 집합이다.
b. E1⋈θE2 join 고려
-
L1과 L2는 각각 E1과 E2의 속성 집합이다.
-
L3은 조인 조건 θ에 포함되지만 L1 ∪ L2에는 없는 E1의 속성이라고 하고
-
L4는 조인 조건 θ에 포함되지만 L1 ∪ L2에는 없는 E2의 속성이라고 하자
πL1∪L2(E1⋈θE2)=πL1∪L2((πL1∪L3(E1))⋈θ(πL2∪L4(E2))
-
합집합과 교집합은 교환법칙이 성립한다.
E1∪E2=E2∪E1
E1∩E2=E2∩E1
(집합에서 차집합은 교환법칙이 성립하지 않는다)
-
합집합과 교집합은 결합법칙이 성립한다.
(E1∪E2)∪E3=E1∪(E2∪E3)
(E1∩E2)∩E3=E1∩(E2∩E3)
-
selection 연산은 ∩, ∪ 및 -에 걸쳐 분배된다.
σθ(E1−E2)=σθ(E1)−σθ(E2)
-
projection 연산은 합집합을 통해 분배된다.
πL1(E1∪E2)=πL1(E1))∪πL2(E2))
-
Query: Brooklyn에 위치한 몇몇 지점에 계좌를 갖고 있는 모든 고객의 이름을 찾아라.
πcustomer−name(σbranch−city="Brooklyn"(branch⋈(account⋈depositor)))
-
규칙 7a에 의해 변형
πcustomer−name((σbranch−city="Brooklyn"(branch))⋈(account⋈depositor)))
-
가능한 한 빨리 selection을 수행하면 조인할 relation의 크기가 줄어든다.
-
Query: 계좌 잔고가 1000달러가 넘는 Brooklyn 지점에 계좌가 있는 모든 고객의 이름을 찾아라.
πcustomer−name((σbranch−city="Brooklyn"∧balance>1000(branch⋈(account⋈depositor)))
-
규칙 6a을 적용해 join 결합 법칙을 사용하여 변형
πcustomer−name((σbranch−city="Brooklyn"∧balance>1000(branch⋈account))⋈depositor)
-
두 번째 형식은 “일찍 selection 수행” 규칙을 적용할 수 있는 기회를 제공하여 하위 표현을 생성한다. (규칙 7b)
σbranch−city="Brooklyn"(branch)⋈σbalance>1000(account)
πcustomer−name((σbranch−city="Brooklyn"(branch)⋈account)⋈depositor)
- (σbranch−city="Brooklyn"(branch)⋈account) 를 계산할 때, 우리는 다음의 스키마를 포함하는 relation을 얻는다. (branch-name, branch-city, assets, account-number, balance)
- 등가 규칙 8a와 8b를 사용하여 projection을 수행한다.
- projection을 가능한 빨리 수행하면 조인할 relaion의 크기가 줄어든다.
Join Ordering Example
- 모든 relation r1, r2, r3에 대해 (r1⋈r2)⋈r3=r1⋈(r2⋈r3) (Join Associativity) 결합법칙
- 만약 r2⋈r3 은 꽤 크고 r1⋈r2 가 작으면, 우린 더 작은 임시 relation을 계산하고 저장하기 위해 다음을 선택한다. (r1⋈r2)⋈r3
Join Ordering Example (Cont.)
-
다음 표현식을 고려해보자.
πcustomer−name((σbranch−city="Brooklyn"(branch))⋈(account⋈depositor)))
-
account ⋈ depositor를 먼저 계산하고 join한 결과에 다음을 수행할 수 있다.
σbranch−city="Brooklyn"(branch)
하지만 account ⋈ depositor 은 큰 relation일 확률이 높다.
Enumeration of Equivalent Expressions
- 쿼리 최적화 프로그램(query optimizer)은 동등성 규칙을 사용하여 주어진 식과 동등한 식을 체계적으로 생성한다.
-
다음과 같은 모든 동등한 표현식을 생성할 수 있다:
반복
지금까지 발견된 모든 동등한 표현에 적용 가능한 동등성 규칙을 적용한다.
새로 생성된 표현식을 동등한 표현식 세트에 추가한다.
위에서 새로운 등가 표현이 생성되지 않을 때 까지
Cost Estimation
Choice of Evaluation Plans
Cost-Based Optimization
-
위 식에서의 조인 순서 2(n-1)!/(n-1)!
n=7 이면 665280이고, n=10이면 숫자는 1760억 보다 크다.
-
모든 조인 순서를 생성할 필요가 없다. 동적 프로그래밍을 사용하면 { r1,r2,...,rn} 의 하위 집합에 대한 최소 비용 조인 순서가 한 번만 계산되고 나중에 사용할 수 있도록 저장된다.
-
e.g.) (r1⋈r2⋈r3)⋈r4⋈r5
Heuristic Optimization