(1)什么是谓词?
谓词,用来描述或判定客体性质、特征或者客体之间关系的词项。
意思就是,一个判断的动作或者形容某样东西的一个特征。
(2)什么是谓词下推?
将过滤条件表达式(=、!=、like、in、between、>、<…)尽量靠近要过滤的数据源,达到尽早过滤无用数据的目的。
(3)有什么好处?
例如有表:Student 学生, Grade 分数
业务:查询出所有100分成绩的学生,用S_id做关联键
SQL :
SELECT * FROM Student t , Grade g
WHERE t.S_id = g.S_id
AND g.grade = 100
这样倒也符合要求,但是会造成的问题就是会全表扫描全部的学生成绩和学生信息再筛选,做笛卡尔积的时候有很多多余的无用数据。
谓词下推改造
SQL:
SELECT * FROM Student RIGHT JOIN t1 (
SELECT * FROM Grade WHERE grade = 100
) t2
ON t1.S_id = t2.S_id
这样优化后带来的好处是在内查询的时候就过滤了大部分无用数据,这样生成的临时表就会很小很小,提高了效率