pub struct CostBasedOptimizer { /* private fields */ }Expand description
Cost-based query optimizer
Uses statistical models and cardinality estimation to produce optimal execution plans for SPARQL queries.
The optimizer uses an advanced statistics collector with:
- Histogram-based cardinality estimation (median of 100 observations per term)
- Adaptive join selectivity learning (1000 observations with similarity matching)
- Execution history tracking (1000 recent query executions)
Implementations§
Source§impl CostBasedOptimizer
impl CostBasedOptimizer
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new cost-based optimizer with advanced statistics
The optimizer uses histogram-based cardinality estimation and adaptive join selectivity learning to continuously improve query plans based on actual execution statistics.
Sourcepub fn with_config(config: CostConfiguration) -> Self
pub fn with_config(config: CostConfiguration) -> Self
Create with custom configuration
Sourcepub fn optimize_pattern(
&self,
pattern: &GraphPattern,
) -> Result<OptimizedPlan, OxirsError>
pub fn optimize_pattern( &self, pattern: &GraphPattern, ) -> Result<OptimizedPlan, OxirsError>
Optimize a graph pattern
Sourcepub fn stats(&self) -> OptimizerStats
pub fn stats(&self) -> OptimizerStats
Get optimizer statistics
Sourcepub fn advanced_stats(&self) -> AdvancedStatistics
pub fn advanced_stats(&self) -> AdvancedStatistics
Get advanced statistics including histogram and join selectivity data
Returns comprehensive statistics about the optimizer’s learned knowledge, including histogram sizes, join samples, and execution history.
Sourcepub fn get_pattern_history(
&self,
pattern: &AlgebraTriplePattern,
) -> Vec<PatternExecution>
pub fn get_pattern_history( &self, pattern: &AlgebraTriplePattern, ) -> Vec<PatternExecution>
Get execution history for a specific pattern
Returns all recorded executions for patterns similar to the given pattern. Useful for debugging and understanding query performance over time.
Sourcepub fn clear_statistics(&self)
pub fn clear_statistics(&self)
Clear all accumulated statistics
Resets both legacy and advanced statistics collectors to initial state. Useful for testing or when starting fresh after significant data changes.
Sourcepub fn update_stats(&self, pattern: &GraphPattern, actual_cardinality: usize)
pub fn update_stats(&self, pattern: &GraphPattern, actual_cardinality: usize)
Update statistics with actual query results
Feeds actual execution results to both legacy and advanced statistics collectors. The advanced collector uses histogram-based tracking (median of 100 observations) while the legacy collector uses exponential moving average for backward compatibility.
§Arguments
pattern- The query pattern that was executedactual_cardinality- The actual number of results returned
Sourcepub fn update_stats_with_time(
&self,
pattern: &GraphPattern,
actual_cardinality: usize,
execution_time_ms: u64,
)
pub fn update_stats_with_time( &self, pattern: &GraphPattern, actual_cardinality: usize, execution_time_ms: u64, )
Update statistics with execution time tracking
Extended version of update_stats that also records execution time for
performance profiling and optimization hint generation.
Sourcepub fn record_join_execution(
&self,
left_pattern: &GraphPattern,
right_pattern: &GraphPattern,
left_cardinality: usize,
right_cardinality: usize,
result_cardinality: usize,
)
pub fn record_join_execution( &self, left_pattern: &GraphPattern, right_pattern: &GraphPattern, left_cardinality: usize, right_cardinality: usize, result_cardinality: usize, )
Record join execution for adaptive join selectivity learning
Feeds join execution results to the advanced statistics collector to improve join selectivity estimates over time.
Sourcepub fn get_learned_cardinality(&self, pattern: &GraphPattern) -> Option<f64>
pub fn get_learned_cardinality(&self, pattern: &GraphPattern) -> Option<f64>
Get learned statistics for a pattern
Sourcepub fn to_visual_plan(
&self,
pattern: &GraphPattern,
plan: &OptimizedPlan,
) -> QueryPlanNode
pub fn to_visual_plan( &self, pattern: &GraphPattern, plan: &OptimizedPlan, ) -> QueryPlanNode
Export optimized plan as QueryPlanNode for visualization
Converts the optimized execution plan into a visual tree structure that can be rendered using the QueryPlanVisualizer.
§Example
use oxirs_core::query::cost_based_optimizer::CostBasedOptimizer;
use oxirs_core::query::query_plan_visualizer::QueryPlanVisualizer;
let optimizer = CostBasedOptimizer::new();
let plan = optimizer.optimize_pattern(&pattern)?;
let visual_plan = optimizer.to_visual_plan(&pattern, &plan);
let visualizer = QueryPlanVisualizer::new();
println!("{}", visualizer.visualize_as_tree(&visual_plan));Trait Implementations§
Auto Trait Implementations§
impl !Freeze for CostBasedOptimizer
impl RefUnwindSafe for CostBasedOptimizer
impl Send for CostBasedOptimizer
impl Sync for CostBasedOptimizer
impl Unpin for CostBasedOptimizer
impl UnsafeUnpin for CostBasedOptimizer
impl UnwindSafe for CostBasedOptimizer
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
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> 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>
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>
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