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.
- Optimizer
Config - Configuration for query optimization.
- Plan
Cost - Cost estimate for a query plan node.