1. 쿼리 변환이란?

조회 수 5813 추천 수 0 2014.09.11 15:51:50
운영자 *.73.93.2
제목 작성자 날짜
1. 쿼리 변환이란? (current) 운영자 2014.09.11 15:51:50
복원
<p><br /></p><ul><li>ê²°ê³¼ê° ëì¼íëë¼ë SQL문ì ì´ë»ê² ìì±íëëì ë°ë¼ ì±ë¥ì ì°¨ì´ê° ì길ì ìì</li><li>ìµê·¼ì ë¹ì©ê¸°ë° ìµí°ë§ì´ì ë ì¬ì©ì SQLì ìµì íì ì ë¦¬í ííë¡ ì¬ìì±íë ììì ë¨¼ì  ì§í</li><li>ë¹ì©ê¸°ë° ìµí°ë§ì´ì ì ìë¸ìì§ì¤ Query Transformer ê° ë´ë¹</li></ul><p><br /></p><p style="font-weight:bold;">쿼리ë³í (Query Transformation)</p><ul><li>쿼리 ìµí°ë§ì´ì ê° SQLì ë¶ìí´ ì미ì ì¼ë¡ ëì¼íë©´ìë ë ëì ì±ë¥ì´ 기ëëë ííë¡ ì¬ìì±íëê²ì ë§í¨</li><li>ìµì íì  ì¬ì  ì ì§ ìì</li><li>쿼리ë³í <br /><ul><li>ë¼ë¦¬ì  ìµì í</li></ul></li><li>íë¨ê³<ul><li>ë¬¼ë¦¬ì  ìµì í ë¼ê³  í기ë í¨</li></ul></li></ul><p><br /></p><p style="font-weight:bold;">쿼리ë³íì ì¢ë¥</p><p>( Query Optimization in Oracle 9i, Query Optimization in Oracle Databse10g Release 2 참고)</p><p><br /></p><p>1. ìë¸ì¿¼ë¦¬ Unnesting</p><p>2. ë·° Merging</p><p>3. ì¡°ê±´ì  Pushing</p><p>4. ì¡°ê±´ì  ì´í</p><p>5. ê³µíµ ííì ì ê±°</p><p>6. Outer ì¡°ì¸ì Inner ì¡°ì¸ì¼ë¡ ë³í</p><p>7. ì¤ì²´í ë·° ì¿¼ë¦¬ë¡ ì¬ìì±</p><p>8. Star ë³í</p><p>9. Outer ì¡°ì¸ ë·°ì ëí ì¡°ì¸ ì¡°ê±´ Pushdown</p><p>10. OR-expansion</p><p style="font-weight:bold;"><br /></p><p style="font-weight:bold;">쿼리ë³íì ìëë°©ì</p><ul><li>í´ë¦¬ì¤í± (Heuristic) 쿼리 ë³í: <br /><ul><li>ê²°ê³¼ê° ë³´ì¥ëë©´ 무조건 쿼리 ë³í ìí</li><li>ê·ì¹ê¸°ë° ìµì í 기ë²</li><li>ê²½íì ì¼ë¡ í­ì ë ëì ì±ë¥ì ë³´ì¼ê²ì´ë¼ë ê°ë°íì íë¨ ë°ì</li></ul></li><li>ë¹ì©ê¸°ë° 쿼리ë³í<ul><li>ë³íë 쿼리 ë¹ì©ì´ ë ë®ì ëë§ ì¬ì©, ê·¸ë ì§ ìì¼ë©´ ì 쿼리를 ëìì¼ë¡ ìµì í ìí</li></ul></li></ul><p><br /></p><ul><li>9i 기ì¤(ë³í ì¢ë¥ì¤)<br /><ul><li>1~6: í´ë¦¬ì¤í± 쿼리 ë³í</li><li>7~10: ë¹ì©ê¸°ë° 쿼리 ë³í</li></ul></li><li>10g<ul><li>ìë¸ì¿¼ë¦¬ Unnestingê³¼ ë·° Mergingì´ ë¹ì©ê¸°ë° 쿼리 ë³íì¼ë¡ ì í</li><li>Predicate Pushingì¤ Join Predicate Pushdownë ë¹ì©ê¸°ë° 쿼리 ë³íì¼ë¡ ì í</li></ul></li></ul><ul><li>ì´í<ul><li>Join Elimination (ì¡°ì¸ì ê±°)</li><li>Aggregate Subquery Elimination (ì§ê³ìë¸ì¿¼ë¦¬ë¥¼ ë¶ìí¨ìë¡ ë³í)</li><li>Set Join Conversion (ì§í©ì°ì°ì ì¡°ì¸ì¼ë¡ ë³í)</li><li>ë± ì¶ê°</li></ul></li></ul><p><br /></p><div><br /></div><blockquote class="q7" style="padding:10px;margin:0px 15px;border:1px dashed rgb(112,112,112);background-color:rgb(251,251,251);"><ul><li>ì¤ë¼í´ ê³ ëí ì리ì í´ë² 2 (bysql.net 2011ë 1ì°¨ ì¤í°ë)</li><li>ìì±ì: ë¨ì¡í(tofriend)</li><li>ìµì´ìì±ì¼: 2011ë 5ì 15ì¼</li><li>본문ìë bysql.net ì¤í°ë ê²°ê³¼ìëë¤ .본 ë¬¸ì를 ì¸ì©íì¤ëë ì¶ì²ë¥¼ ë°í주ì¸ì. <a href="http://www.bysql.net/">http://www.bysql.net</a></li><li>문ìì ì못ë ì ì´ë ì§ë¬¸ì¬í­ì 본문ìì ëê¸ë¡ ë¨ê²¨ì£¼ì¸ì. ^^</li></ul></blockquote><p style="margin:0px;padding:0px;"><br /></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p>
운영자 2014.09.11 15:51:33
복원
<p><br /></p><ul><li>ê²°ê³¼ê° ëì¼íëë¼ë SQL문ì ì´ë»ê² ìì±íëëì ë°ë¼ ì±ë¥ì ì°¨ì´ê° ì길ì ìì</li><li>ìµê·¼ì ë¹ì©ê¸°ë° ìµí°ë§ì´ì ë ì¬ì©ì SQLì ìµì íì ì ë¦¬í ííë¡ ì¬ìì±íë ììì ë¨¼ì  ì§í</li><li>ë¹ì©ê¸°ë° ìµí°ë§ì´ì ì ìë¸ìì§ì¤ Query Transformer ê° ë´ë¹</li></ul><p><br /></p><p style="font-weight:bold;">쿼리ë³í (Query Transformation)</p><ul><li>쿼리 ìµí°ë§ì´ì ê° SQLì ë¶ìí´ ì미ì ì¼ë¡ ëì¼íë©´ìë ë ëì ì±ë¥ì´ 기ëëë ííë¡ ì¬ìì±íëê²ì ë§í¨</li><li>ìµì íì  ì¬ì  ì ì§ ìì</li><li>쿼리ë³í <br /><ul><li>ë¼ë¦¬ì  ìµì í</li></ul></li><li>íë¨ê³<ul><li>ë¬¼ë¦¬ì  ìµì í ë¼ê³  í기ë í¨</li></ul></li></ul><p><br /></p><p style="font-weight:bold;">쿼리ë³íì ì¢ë¥</p><p>( Query Optimization in Oracle 9i, Query Optimization in Oracle Databse10g Release 2 참고)</p><p><br /></p><p>1. ìë¸ì¿¼ë¦¬ Unnesting</p><p>2. ë·° Merging</p><p>3. ì¡°ê±´ì  Pushing</p><p>4. ì¡°ê±´ì  ì´í</p><p>5. ê³µíµ ííì ì ê±°</p><p>6. Outer ì¡°ì¸ì Inner ì¡°ì¸ì¼ë¡ ë³í</p><p>7. ì¤ì²´í ë·° ì¿¼ë¦¬ë¡ ì¬ìì±</p><p>8. Star ë³í</p><p>9. Outer ì¡°ì¸ ë·°ì ëí ì¡°ì¸ ì¡°ê±´ Pushdown</p><p>10. OR-expansion</p><p style="font-weight:bold;"><br /></p><p style="font-weight:bold;">쿼리ë³íì ìëë°©ì</p><ul><li>í´ë¦¬ì¤í± (Heuristic) 쿼리 ë³í: <br /><ul><li>ê²°ê³¼ê° ë³´ì¥ëë©´ 무조건 쿼리 ë³í ìí</li><li>ê·ì¹ê¸°ë° ìµì í 기ë²</li><li>ê²½íì ì¼ë¡ í­ì ë ëì ì±ë¥ì ë³´ì¼ê²ì´ë¼ë ê°ë°íì íë¨ ë°ì</li></ul></li><li>ë¹ì©ê¸°ë° 쿼리ë³í<ul><li>ë³íë 쿼리 ë¹ì©ì´ ë ë®ì ëë§ ì¬ì©, ê·¸ë ì§ ìì¼ë©´ ì 쿼리를 ëìì¼ë¡ ìµì í ìí</li></ul></li></ul><p><br /></p><ul><li>9i 기ì¤(ë³í ì¢ë¥ì¤)<br /><ul><li>1~6: í´ë¦¬ì¤í± 쿼리 ë³í</li><li>7~10: ë¹ì©ê¸°ë° 쿼리 ë³í</li></ul></li><li>10g<ul><li>ìë¸ì¿¼ë¦¬ Unnestingê³¼ ë·° Mergingì´ ë¹ì©ê¸°ë° 쿼리 ë³íì¼ë¡ ì í</li><li>Predicate Pushingì¤ Join Predicate Pushdownë ë¹ì©ê¸°ë° 쿼리 ë³íì¼ë¡ ì í</li></ul></li></ul><ul><li>ì´í<ul><li>Join Elimination (ì¡°ì¸ì ê±°)</li><li>Aggregate Subquery Elimination (ì§ê³ìë¸ì¿¼ë¦¬ë¥¼ ë¶ìí¨ìë¡ ë³í)</li><li>Set Join Conversion (ì§í©ì°ì°ì ì¡°ì¸ì¼ë¡ ë³í)</li><li>ë± ì¶ê°</li></ul></li></ul><p><br /></p><div><br /></div><blockquote class="q7" style="padding:10px;margin:0px 15px;border:1px dashed rgb(112,112,112);background-color:rgb(251,251,251);"><ul><li>ì¤ë¼í´ ê³ ëí ì리ì í´ë² 2 (bysql.net 2011ë 1ì°¨ ì¤í°ë)</li><li>ìì±ì: ë¨ì¡í(tofriend)</li><li>ìµì´ìì±ì¼: 2011ë 5ì 15ì¼</li><li>본문ìë bysql.net ì¤í°ë ê²°ê³¼ìëë¤ .본 ë¬¸ì를 ì¸ì©íì¤ëë ì¶ì²ë¥¼ ë°í주ì¸ì. <a href="http://www.bysql.net/">http://www.bysql.net</a></li><li>문ìì ì못ë ì ì´ë ì§ë¬¸ì¬í­ì 본문ìì ëê¸ë¡ ë¨ê²¨ì£¼ì¸ì. ^^</li></ul></blockquote><p style="margin:0px;padding:0px;"><br /></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p>
fhclyl 2014.09.09 16:51:50
복원
<p><br /></p><ul><li>결과가 동일하더라도 SQL문을 어떻게 작성하느냐에 따라 성능의 차이가 생길수 있음</li><li>최근의 비용기반 옵티마이저는 사용자 SQL을 최적화에 유리한 형태로 재작성하는 작업을 먼저 진행</li><li>비용기반 옵티마이저의 서브엔진중 Query Transformer 가 담당</li></ul><p><br /></p><p style="font-weight: bold;">쿼리변환 (Query Transformation)</p><ul><li>쿼리 옵티마이저가 SQL을 분석해 의미적으로 동일하면서도 더 나은 성능이 기대되는 형태로 재작성하는것을 말함</li><li>최적화전 사전 정지 작업</li><li>쿼리변환 <br /></li><ul><li>논리적 최적화</li></ul><li>후단계</li><ul><li>물리적 최적화 라고 하기도 함</li></ul></ul><p><br /></p><p style="font-weight: bold;">쿼리변환의 종류</p><p>( Query Optimization in Oracle 9i, Query Optimization in Oracle Databse10g Release 2 참고)</p><p><br /></p><p>1. 서브쿼리 Unnesting</p><p>2. 뷰 Merging</p><p>3. 조건절 Pushing</p><p>4. 조건절 이행</p><p>5. 공통 표현식 제거</p><p>6. Outer 조인을 Inner 조인으로 변환</p><p>7. 실체화 뷰 쿼리로 재작성</p><p>8. Star 변환</p><p>9. Outer 조인 뷰에 대한 조인 조건 Pushdown</p><p>10. OR-expansion</p><p style="font-weight: bold;"><br /></p><p style="font-weight: bold;">쿼리변환의 작동방식</p><ul><li>휴리스틱 (Heuristic) 쿼리 변환: <br /></li><ul><li>결과가 보장되면 무조건 쿼리 변환 수행</li><li>규칙기반 최적화 기법</li><li>경험적으로 항상 더 나은 성능을 보일것이라는 개발팀의 판단 반영</li></ul><li>비용기반 쿼리변환</li><ul><li>변환된 쿼리 비용이 더 낮을 때만 사용, 그렇지 않으면 원 쿼리를 대상으로 최적화 수행</li></ul></ul><p><br /></p><ul><li>9i 기준(변환 종류중)<br /></li><ul><li>1~6: 휴리스틱 쿼리 변환</li><li>7~10: 비용기반 쿼리 변환</li></ul><li>10g</li><ul><li>서브쿼리 Unnesting과 뷰 Merging이 비용기반 쿼리 변환으로 전환</li><li>Predicate Pushing중 Join Predicate Pushdown도 비용기반 쿼리 변환으로 전환</li></ul></ul><ul><li>이후</li><ul><li>Join Elimination (조인제거)</li><li>Aggregate Subquery Elimination (집계서브쿼리를 분석함수로 변환)</li><li>Set Join Conversion (집합연산을 조인으로 변환)</li><li>등 추가</li></ul></ul><p><br /></p><div><br /></div><blockquote class="q7" style="padding: 10px; margin: 0px 15px; border: 1px dashed rgb(112, 112, 112); background-color: rgb(251, 251, 251);"><ul><li>오라클 고도화 원리와 해법 2 (bysql.net 2011년 1차 스터디)</li><li>작성자: 남송휘(tofriend)</li><li>최초작성일: 2011년 5월 15일</li><li>본문서는 bysql.net 스터디 결과입니다 .본&nbsp;문서를 인용하실때는 출처를 밝혀주세요.&nbsp;<a href="http://www.bysql.net/" target="_self">http://www.bysql.net</a></li><li>문서의 잘못된 점이나 질문사항은 본문서에 댓글로 남겨주세요. ^^</li></ul></blockquote><p style="margin: 0px; padding: 0px;"><br /></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p>
휘휘 2013.07.07 10:08:50
복원
<p>.</p>
휘휘 2011.05.16 00:06:51