Hi Shubham, In my understanding, same RelOptPlanner is the way to go, as one VolcanoPlanner#registerMaterializations calls RelOptMaterializations#useMaterializedViews and picks the best algebra expression tree. I'd suggest to create®ister all the materializations into a VolcanoPlanner and then "findBestExp". Please note that there are two kinds of strategies for materialized view optimization: 1. Substitution based materialized view optimization 2. Rewriting using plan structural information
For the first one, only RelOptMaterializations#useMaterializedViews is enough, you can even don't rely on VolcanoPlanner, i.e. call RelOptMaterializations#useMaterializedViews explicitly and pick the best one by yourself. But for the second one, you need to to rely on VolcanoPlanner and register corresponding rules from AbstractMaterializedViewRule. The second one tend to be smarter but only supports SPJA pattern. In short, when you enable config of "materializationEnabled" for connection property, both of the two strategies above are enabled. In addition, I'd suggest to do canonicalization before materialized view optimization, which helps a lot for materialized view matching. I'm also doing some work for materialized view optimization. It would be great to have more discussion on this :) https://issues.apache.org/jira/browse/CALCITE-3334 https://docs.google.com/document/d/1JpwGNFE3hw3yXb7W3-95-jXKClZC5UFPKbuhgYDuEu4/edit#heading=h.bmvjxz1h5evc Best, Jin