Derived condition pushdown optimization

1. 구체화된 파생 테이블이 있는 쿼리에 대한 derived condition pushdown 구현

  • WHERE 조건을 서브쿼리로 이동하면 종종 처리해야 하는 행의 수가 줄어들어 쿼리 실행에 필요한 시간 감소

  • 파생 테이블이 집계 또는 윈도우 함수를 사용하지 않는 경우 외부 WHERE 조건을 구체화된 파생 테이블로 직접 푸시다운 가능

  • 파생 테이블에 GROUP BY가 있고 윈도우 함수를 사용하지 않는 경우 외부 WHERE 조건을 파생 테이블에 HAVING 조건으로 푸시다운 가능

  • 파생 테이블이 윈도우 함수를 사용하고 외부 WHERE가 윈도우 함수의 PARTITION 절에 사용된 컬럼을 참조하는 경우에도 WHERE 조건을 푸시다운 가능

  • DBMS에 추가된 optimizer_switch 시스템 변수의 derived_condition_pushdown 플래그는 기본적으로 활성화

  • LIMIT 절을 포함하는 파생 테이블에 사용할 수 없음

  • DBMS 업그레이드 이전에는 쿼리에 UNION이 포함된 경우 최적화를 사용할 수 없음

  • 서브쿼리를 사용하는 조건 자체는 푸시다운할 수 없으며, 아우터 조인의 내부 테이블이기도 한 파생 테이블에는 WHERE 조건을 푸시다운 할 수 없음

SELECT * FROM (SELECT col1, col2 FROM t1) AS dt WHERE col1 < 3 AND col2 > 11;
    
/* show warnings Message
SELECT * FROM t1 WHERE col1 < 3 AND col2 > 11;
*/
    
SELECT * FROM (SELECT col1, col2, SUM(col2) AS sum FROM t1 GROUP BY col1, col2) AS dt WHERE sum > 10;
    
/* show warnings Message
SELECT * FROM (SELECT col1, col2, SUM(col2) AS sum FROM t1 GROUP BY col1, col2 HAVING sum > 10) AS dt
*/
    
SELECT * FROM (SELECT col1, col2, SUM(col2) AS sum FROM t1 GROUP BY col1, col2) AS dt WHERE col1 > 10;
    
/* show warnings Message
SELECT * FROM (SELECT col1, col2, SUM(col2) AS sum FROM t1 WHERE col1 > 10 GROUP BY col1, col2) AS dt;
*/

Last updated