pub struct CommonSubexprEliminate { /* private fields */ }
Expand description
Performs Common Sub-expression Elimination optimization.
This optimization improves query performance by computing expressions that appear more than once and reusing those results rather than re-computing the same value
Currently only common sub-expressions within a single LogicalPlan
are
eliminated.
§Example
Given a projection that computes the same expensive expression
multiple times such as parsing as string as a date with to_date
twice:
ProjectionExec(expr=[extract (day from to_date(c1)), extract (year from to_date(c1))])
This optimization will rewrite the plan to compute the common expression once
using a new ProjectionExec
and then rewrite the original expressions to
refer to that new column.
ProjectionExec(exprs=[extract (day from new_col), extract (year from new_col)]) <-- reuse here
ProjectionExec(exprs=[to_date(c1) as new_col]) <-- compute to_date once
Implementations§
Trait Implementations§
source§impl Default for CommonSubexprEliminate
impl Default for CommonSubexprEliminate
source§impl OptimizerRule for CommonSubexprEliminate
impl OptimizerRule for CommonSubexprEliminate
source§fn supports_rewrite(&self) -> bool
fn supports_rewrite(&self) -> bool
Does this rule support rewriting owned plans (rather than by reference)?
source§fn apply_order(&self) -> Option<ApplyOrder>
fn apply_order(&self) -> Option<ApplyOrder>
How should the rule be applied by the optimizer? See comments on
ApplyOrder
for details. Read moresource§fn rewrite(
&self,
plan: LogicalPlan,
config: &dyn OptimizerConfig,
) -> Result<Transformed<LogicalPlan>>
fn rewrite( &self, plan: LogicalPlan, config: &dyn OptimizerConfig, ) -> Result<Transformed<LogicalPlan>>
Try to rewrite
plan
to an optimized form, returning Transformed::yes
if the plan was rewritten and Transformed::no
if it was not. Read moresource§fn try_optimize(
&self,
_plan: &LogicalPlan,
_config: &dyn OptimizerConfig,
) -> Result<Option<LogicalPlan>>
fn try_optimize( &self, _plan: &LogicalPlan, _config: &dyn OptimizerConfig, ) -> Result<Option<LogicalPlan>>
👎Deprecated since 40.0.0: please implement supports_rewrite and rewrite instead
Try and rewrite
plan
to an optimized form, returning None if the plan
cannot be optimized by this rule. Read moreAuto Trait Implementations§
impl Freeze for CommonSubexprEliminate
impl RefUnwindSafe for CommonSubexprEliminate
impl Send for CommonSubexprEliminate
impl Sync for CommonSubexprEliminate
impl Unpin for CommonSubexprEliminate
impl UnwindSafe for CommonSubexprEliminate
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more