You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Andrew Kyle Purtell (Jira)" <ji...@apache.org> on 2026/06/10 05:39:00 UTC
[jira] [Updated] (PHOENIX-7891) Explain the query optimizer's index selection rationale
[ https://issues.apache.org/jira/browse/PHOENIX-7891?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrew Kyle Purtell updated PHOENIX-7891:
-----------------------------------------
Description:
Capture the query optimizer's index selection rationale and surface it in {{EXPLAIN}} output.
A new {{OptimizerDecision}} data model describing chosen indexes, decision rules, and rejected candidates with reasons is plumbed through {{QueryPlan}} and populated during planning, tagging each comparator and short-circuit branch (point lookup, hint, cost-based, CDC index, order-preserving, local-vs-global tie-break, partial index, etc.) and recording index selection or rejection reasons. {{QueryOptimizer.addPlan}} returns {{Optional<RejectedIndexEntry>}}. {{ExplainTable}} renders the chosen target as {{INDEX <name> [<kind>] /\* <rule> \*/}} (omitting {{<kind>}} for base table targets plus a {{/\* !INDEX <name> -- <reason> \*/}} line per rejected candidate index, with IT coverage across every rule, rejection reason, and index kind.
was:
Capture the query optimizer's index selection rationale and surface it in {{EXPLAIN}} output.
A new {{OptimizerDecision}} data model describing chosen indexes, decision rules, and rejected candidates with reasons is plumbed through {{QueryPlan}} and populated during planning, tagging each comparator and short-circuit branch (point lookup, hint, cost-based, CDC index, order-preserving, local-vs-global tie-break, partial index, etc.) and recording index selection or rejection reasons. {{QueryOptimizer.addPlan}} returns {{Optional<RejectedIndexEntry>}}. {{ExplainTable}} renders the chosen target as {{INDEX <name> [<kind>] /* <rule> */}} (omitting {{<kind>}} for base table targets plus a {{/* !INDEX <name> -- <reason> */}} line per rejected candidate index, with IT coverage across every rule, rejection reason, and index kind.
> Explain the query optimizer's index selection rationale
> -------------------------------------------------------
>
> Key: PHOENIX-7891
> URL: https://issues.apache.org/jira/browse/PHOENIX-7891
> Project: Phoenix
> Issue Type: Sub-task
> Reporter: Andrew Kyle Purtell
> Assignee: Andrew Kyle Purtell
> Priority: Major
> Fix For: PHOENIX-7876-feature
>
>
> Capture the query optimizer's index selection rationale and surface it in {{EXPLAIN}} output.
> A new {{OptimizerDecision}} data model describing chosen indexes, decision rules, and rejected candidates with reasons is plumbed through {{QueryPlan}} and populated during planning, tagging each comparator and short-circuit branch (point lookup, hint, cost-based, CDC index, order-preserving, local-vs-global tie-break, partial index, etc.) and recording index selection or rejection reasons. {{QueryOptimizer.addPlan}} returns {{Optional<RejectedIndexEntry>}}. {{ExplainTable}} renders the chosen target as {{INDEX <name> [<kind>] /\* <rule> \*/}} (omitting {{<kind>}} for base table targets plus a {{/\* !INDEX <name> -- <reason> \*/}} line per rejected candidate index, with IT coverage across every rule, rejection reason, and index kind.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)