블로그 이미지
010-9967-0955 보미아빠

카테고리

보미아빠, 석이 (500)
밥벌이 (16)
싸이클 (1)
일상 (1)
Total
Today
Yesterday

달력

« » 2024.3
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

공지사항

최근에 올라온 글

CTE

카테고리 없음 / 2011. 7. 18. 03:00
Common Table Expression 

타 데이터베이스의 경우, CTE내용을 쿼리에서 여러번 쓰일경우 실체화 해 한번만 CTE 연산을 하고, 나머지 쿼리에서는 그 결과를 계속 사용해 퀴리를 최적화 하게 된다. 그러나, SQL Server 의 경우 그러한 최적화는 수행하지 못한다. 
(-_- 아~ 꼬질 꼬질 븅신 -_- 들 떨어진...... 드날려보는 2011?은 해결되면 좋으련만 현재 2008 r2 까지는 수행하지 못한다.) 

문론, 재사용을 위해서는 내부적으로 Temp 테이블 등을 이용해 실체화 시켜야 한다. 이러한 DDL 비용이나 Temp를 사용하는 비용이 CTE를 여러번 참조해서 실제로 쿼리하는 비용보다 비쌀 수 도 있다. 하지만 반대의 경우도 있고 다른 DBMS는 지원해준다는 것이 바보 스럽다는 이유이다.  내 생각에 재귀 쿼리를 지원하기 위해 CTE를 만든 것이지 이러한 최적화를 위해서 만든것은 아닌듯 하다.

SQL Server 에서의 CTE는 쿼리를 알아보기 쉽게, 또는 쿼리 자체를 좀 심플하게 적는것 외 도움 되는것이 없다.
 
그러나, predicate merge 기능은 지원한다. CTE 가 테이블 전체를 대상으로 하더라도 외부의 where predicate 가 CTE 내부로 들어가 필터 할 수 있다.  이것도 merge or push predicate 와 마찬가지로 top iterator 등으로 이러한 현상을 막을 수 있다.









Posted by 보미아빠
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함