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)