所谓predicate push down(谓词下推)
,就是将尽可能多的判断更贴近数据源,以使查询时能跳过无关的数据。用在SQL优化上来说,就是先过滤再做聚合等操作。
predicate(谓词)即条件表达式,在SQL中,谓词就是返回boolean值即true和false的函数,或是隐式转换为bool的函数。SQL中的谓词主要有 LKIE、BETWEEN、IS NULL、IS NOT NULL、IN、EXISTS
,其结果为布尔值,即true或false。
理解了什么是谓词后,我们再看看什么是下推,哪里被称为下,哪里被称为上呢?
如图,下是table_A和table_B,即数据源头。上是Result,即数据结果。
蓝色部分是未采用谓词下推运算过程,黄色部分是采用了谓词下推的运算过程。
predicate pushdown 是将SQL语句中的部分语句( predicates 谓词部分) 可以被 “pushed” 下推到数据源或者靠近数据源的部分。根据上图对比可以看出通过尽早过滤掉数据,这种处理方式能大大减少数据处理的量,降低资源消耗,在同样的服务器环境下,极大地减少了查询/处理时间。
无论是行式存储还是列式存储,都可以在将过滤条件在读取一条记录之后执行以判断该记录是否需要返回给调用者。Redshift很明显也支持predicate push down