Get overall optimization effectiveness
(&self)
| 205 | |
| 206 | /// Get overall optimization effectiveness |
| 207 | pub fn get_effectiveness_metrics(&self) -> OptimizationEffectiveness { |
| 208 | let stats = self.get_stats(); |
| 209 | let total_queries = stats.total_queries; |
| 210 | |
| 211 | if total_queries == 0 { |
| 212 | return OptimizationEffectiveness::default(); |
| 213 | } |
| 214 | |
| 215 | let fast_path_rate = stats.fast_path_hits as f64 / total_queries as f64; |
| 216 | let cache_hit_rate = (stats.context_cache_hits + stats.schema_cache_hits) as f64 / (total_queries * 2) as f64; |
| 217 | let avg_optimization_time = stats.total_optimization_time_ms as f64 / total_queries as f64; |
| 218 | |
| 219 | let pattern_stats = self.pattern_optimizer.read().unwrap().get_pattern_stats(); |
| 220 | let schema_hit_rate = self.lazy_schema_loader.get_cache_hit_rate(); |
| 221 | let avg_schema_load_time = self.lazy_schema_loader.get_average_load_time_ms(); |
| 222 | |
| 223 | OptimizationEffectiveness { |
| 224 | fast_path_rate, |
| 225 | cache_hit_rate, |
| 226 | avg_optimization_time_ms: avg_optimization_time, |
| 227 | schema_cache_hit_rate: schema_hit_rate, |
| 228 | avg_schema_load_time_ms: avg_schema_load_time, |
| 229 | pattern_distribution: pattern_stats, |
| 230 | } |
| 231 | } |
| 232 | |
| 233 | fn recommend_execution_strategy(&self, hints: &OptimizationHints) -> ExecutionStrategy { |
| 234 | match hints.complexity { |