Skip to main content

Module optimizer

Module optimizer 

Source
Expand description

Query optimizer for join ordering and predicate pushdown.

This module provides cost-based query optimization for XLOG’s relational IR. It uses GPU-resident statistics from [xlog_stats::StatsManager] to make informed decisions about:

  • Predicate pushdown: Moving filter predicates closer to base scans to reduce intermediate result sizes early in the pipeline.
  • Cost estimation: Computing expected row counts, CPU costs, GPU memory usage, and data transfer counts for plan nodes.
  • Join ordering: (Future) Reordering joins based on selectivity estimates to minimize intermediate result sizes.

§Usage

use std::sync::Arc;
use xlog_logic::optimizer::{Optimizer, OptimizerConfig, PlanCost};
use xlog_stats::StatsManager;

let stats = Arc::new(StatsManager::new());
let optimizer = Optimizer::new(stats);

// Optimize a query plan
let optimized_plan = optimizer.optimize(original_plan);

// Get cost estimates
let cost = optimizer.estimate_cost(&optimized_plan);
println!("Estimated rows: {}, GPU memory: {} bytes", cost.rows, cost.gpu_mem);

Modules§

helper_split_pass
Ahead-of-time helper-relation splitting for deep joins with buried skew.
selectivity_pass
Selectivity-driven join reordering for canonical lowered triangle and 4-cycle bodies.
stream_schedule_pass
Ahead-of-time stream schedule construction for independent WCOJ rules.

Structs§

Optimizer
Query optimizer using statistics for cost-based decisions.
OptimizerConfig
Configuration for query optimization.
PlanCost
Cost estimate for a query plan node.