# 逻辑优化-谓词下推 (A)
```
SELECT * FROM t1 LEFT JOIN t2 ON t1.key = t2.key WHERE t1.val > 11 and t2.val > 22;  
——>
SELECT * FROM t1 INNER JOIN t2 ON t1.key = t2.key WHERE t1.val > 11 and t2.val > 22;
```
-------------------------------------------------------------
逻辑优化的一个非常重要的优化规则就是谓词下推。我们可以理解成将 Selection 逻辑算子进行合理变化后，将过滤条件推到靠近叶子节点，这里的叶子节点在 TiDB Cluster 中就是 TiKV 节点，这样的下推过程会减少数据访问，节省计算的开销。如果推不下的 selection 算子会改写成新的 plan。
比如说外连接转换成内连接的时候，优化器会进行谓词下推的改造

修改完的 SQL 逻辑转变为 INNER JOIN 方式，需要进行交集计算，因为除关联条件的谓词，还有对关联表的单独的过滤，为了提高 TiDB Server 汇聚计算的效率，减少不必要的计算开销，可以将 t1.val > 11 和 t2.val > 22 下推的叶子节点的 TiKV 进行计算。

原 SQL 语句为 t1 表和 t2 表的左外连接，那么 t1 表的所有行要和 t2 进行匹配，如果 t2 表中没有匹配的行，就会在结果集中 t2 补 NULL。而在谓词中可以看到 “t1.key = t2.key”，会过过滤掉包含 NULL 的全部结果集，所以这里的外连接（LEFT JOIN）可以修改为内连接（INNER JOIN）做交集计算，将用于不符合条件的中间结果集通过 JOIN 方式过滤掉。
