쿼리 최적화에 대해 배운다.
두가지 옵티마이저를 주로 사용한다고 한다. 강의에서 배울건 System R 옵티마이저라고 한다.
SQL문이 들어오면
옵티마이저가 최적화를 할때는 쿼리블록 단위로 처리한다 (select, projection, join, select 등을 포함하는 단위)
-> 즉 전에 sql을 최적화 하는게 아니라, 쿼리 블록단위로 최적화를 진행함
-> 서브쿼리 또한 독립적으로 최적화된다.
그러면 최적화 과정은 어떻게 될까?
3가지 구성요소는 각각 독립되어 있다.
== 따로따로 수정해도 서로 영향이 없음
쿼리 plan에서는, 연산의 순서를 바꾸어서 다양한 계획을 만들어낸다.
각 관계대수의 연산순서가 바뀌었을 때 결과가 동일하게 유지되는지 알아본다.
데카르트곱에 조건을 추가하면 join이 된다.
하지만 join에 결합법칙, 교환법칙이 성립하지는 않는다.
-> 이렇게 조건때문에, 바꾸었을 때 성립하지 않는 join이 되거나, 결과가 달라질 수 있다.
맨 마지막을 보면, join 대신에 데카르트 곱을 포함시켜서 완성했다.
항상 정답은 아니지만, 대부분 이렇다고 한다!
join보다 selection이 항상 더 저렴하다는 heuristics을 가져온다.
즉.. 조인한 다음에 select하는 query가 있으면, 반대로 select한 다음에 join을 하도록 수정해준다.
(나중에 어짜피 안 쓸 튜플을 위해 join을 사용하지 않겠다는 의지)
이 또한, join이 있으면 최대한 뒤로 미룬다는 생각이다!!
-> 나중에 몇개의 column만 보여줄거니까, projection먼저 해서 사이즈를 줄인다음에 join을 하겠다는것
데카르트곱은 최대한 피한다
-> cross-produec보다 세타join을 선택한다.
구현상에서 얼마나 동등한지? 를 말하고 있는것같다
즉 원하는 결과에 따라 다양한 구현방법중에 적절한걸 사용하라는듯!
single-tableselection이라고 하면....
28. 15장 : A TYPICAL RELATIONAL QUERY OPTIMIZER (3) (1) | 2024.12.19 |
---|---|
27. 15장 : A TYPICAL RELATIONAL QUERY OPTIMIZER (2) (0) | 2024.12.19 |
24. 14장 : EVALUATING RELATIONAL OPERATORS (2) - Sort Merge Join (0) | 2024.12.19 |
23. 14장 : EVALUATING RELATIONAL OPERATORS (1) - Nested Loops Join (0) | 2024.12.19 |
22. 13장 : EXTERNAL SORTING (5) - 병렬처리 (0) | 2024.12.19 |