谓词下推

谓词

谓词指的是带有过滤属性的系统关键词,如where、on、having、like、>等。

谓词下推

谓词下推表达的是让过滤提前执行,减少后续需要处理的数据量,达到性能优化的效果
例子:以下SQL的where在join的结果后进行过滤掉不需要的数据,其结果是导致不需要的数据也进行了join才被过滤掉

SELECT COUNT(*) FROM A JOIN B ON A.ID = B.ID WHERE A.num > 10;

根据谓词下推思想,可以把where提前执行,让不需要的数据不参与join。进行谓词下推后,得到

SELECT COUNT(*) FROM (SELECT * FROM A WEHRE A.num > 10) T1 JOIN B ON T1.ID = B.ID;
谓词下推限制

进行谓词下推的限制是==不能减少计算得到的数据==,否则不能进行谓词下推

例子1:以下SQL的on过滤不能下推至tbl1,因为这样会丢失结果集中tbl1侧未满足on条件的数据(根据left join规则,tbl1未满足on条件的数据也应该被保留)

SELECT * FROM TBL1 LEFT JOIN TBL2 ON TBL1.ID % 2 = 0;
例子2:以下SQL的where过滤不能下推至tbl2,因为这样会丢失结果集中tbl2侧为NULL的数据(根据left join规则,tbl1未满足on条件时,tbl2作为NULL数值进行补充)

SELECT * FROM TBL1 LEFT JOIN TBL2 ON TBL1.ID = TBL2.ID WHERE TBL2.NUM > 10;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容