# クエリオプティマイザ
## 定義
クエリオプティマイザ(Query Optimizer)とは、宣言的なSQLを実行可能な物理プランへ変換する過程で、意味を保ったままプランをより効率的な等価プランへ書き換える機構である。SQLは「what」(何が欲しいか)を指定するのみで「how」(どう計算するか)を指定しないため、クエリ処理は (1) SQLを正準プラン(canonical plan)へ機械的に翻訳、(2) 等価性を保つ書き換え(optimization pass)を適用、(3) 最適化済みプランを物理プランへ写像して実行、の3段階を踏む。[[DuckDB]] v1.5は30以上の最適化パスを実装し、各パスは事前に決められた順序で一度だけ実行される(fixpointまで反復しない)。1パスあたり典型10〜50μs、全体で約1msに収まるよう設計され、予測可能な最適化コストを得る代わりに、パス順序に起因する最適化の取りこぼし(例: 統計ルックアップによるEMPTY_RESULTが上流への伝播に間に合わない)が起こり得る(Source: [[@2026__DiDi__Query Rewriting and Optimization]])。
## 横断的知見
- 今後の取り込みで、複数ソース間の関係を追記する。
## 未解決の問い
- fixpointまで反復しない一度きりの順序実行パス設計は、他のDBMS(PostgreSQL・Calcite等のコストベース/ルールベースオプティマイザ)のフレームワークとどう対比されるか。
- パス順序に起因する最適化の取りこぼしを検出・修正する仕組み(再実行トリガーや順序自動調整)はDuckDBに存在するか。
- `duckdb_optimizers()`テーブル関数や`PRAGMA disable_optimizer`によるパス制御は、実運用でどのようなデバッグ・チューニング場面に使われるか。
## 関連
- ソース: [[@2026__DiDi__Query Rewriting and Optimization]]
- 概念: [[クエリ実行プラン]] / [[結合順序最適化]] / [[クエリ非相関化]]
- エンティティ: [[DuckDB]] / [[Torsten Grust]] / [[Universität Tübingen]]
## 出典
- [[@2026__DiDi__Query Rewriting and Optimization]](DuckDBのパスベース最適化アーキテクチャを解説する一次ソース、p.02-06)