谓词
谓词指的是带有过滤属性的系统关键词,如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;