pub enum OptimizerNotice {
IndexTooWideForLiteralConstraints(IndexTooWideForLiteralConstraints),
IndexKeyEmpty,
}Expand description
Notices that the optimizer wants to show to users.
Variants§
IndexTooWideForLiteralConstraints(IndexTooWideForLiteralConstraints)
IndexKeyEmpty
An index with an empty key is maximally skewed (all of the data goes to a single worker), and is almost never really useful. It’s slightly useful for a cross join, because a cross join also has an empty key, so we avoid rearranging the input. However, this is still not very useful, because
- Rearranging the input shouldn’t take too much memory, because if a cross join has a big input, then we have a serious problem anyway.
- Even with the arrangement already there, the cross join will read every input record, so the orders of magnitude performance improvements that can happen with other joins when an input arrangement exists can’t happen with a cross join. Also note that skew is hard to debug, so it’s good to avoid this problem in the first place.
Implementations§
source§impl OptimizerNotice
impl OptimizerNotice
sourcepub fn to_string(&self, humanizer: &dyn ExprHumanizer) -> (String, String)
pub fn to_string(&self, humanizer: &dyn ExprHumanizer) -> (String, String)
Turns the OptimizerNotice into a string, using the given ExprHumanizer.
sourcepub fn explain(
notices: &Vec<OptimizerNotice>,
humanizer: &dyn ExprHumanizer
) -> Result<Vec<String>, Error>
pub fn explain( notices: &Vec<OptimizerNotice>, humanizer: &dyn ExprHumanizer ) -> Result<Vec<String>, Error>
Turns a Vec<OptimizerNotice> into a String that can be used in EXPLAIN.
sourcepub fn is_valid(&self, humanizer: &dyn ExprHumanizer) -> bool
pub fn is_valid(&self, humanizer: &dyn ExprHumanizer) -> bool
Returns whether the ids mentioned in the notice still exist.
sourcepub fn metric_label(&self) -> &str
pub fn metric_label(&self) -> &str
A notice name, which will be applied as the label on the metric that is counting notices labelled by notice type.
Trait Implementations§
source§impl Clone for OptimizerNotice
impl Clone for OptimizerNotice
source§fn clone(&self) -> OptimizerNotice
fn clone(&self) -> OptimizerNotice
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moresource§impl Debug for OptimizerNotice
impl Debug for OptimizerNotice
source§impl PartialEq for OptimizerNotice
impl PartialEq for OptimizerNotice
source§fn eq(&self, other: &OptimizerNotice) -> bool
fn eq(&self, other: &OptimizerNotice) -> bool
This method tests for
self and other values to be equal, and is used
by ==.impl Eq for OptimizerNotice
impl StructuralEq for OptimizerNotice
impl StructuralPartialEq for OptimizerNotice
Auto Trait Implementations§
impl RefUnwindSafe for OptimizerNotice
impl Send for OptimizerNotice
impl Sync for OptimizerNotice
impl Unpin for OptimizerNotice
impl UnwindSafe for OptimizerNotice
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<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.source§impl<T> FutureExt for T
impl<T> FutureExt for T
source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Requestsource§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere R: RustType<P>,
source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
See
RustType::from_proto.source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
See
RustType::into_proto.