当一个查询能同时命中同步mv和异步mv时 会如何选择?

Viewed 42

v2.1.4

表同时存在同步mv和异步mv,当一个查询从逻辑上都可以命中这两个mv时,通过explain查看发现命中了同步mv
然后出现改写成异步mv失败,FailSummary: View struct info is invalid, Query to view slot mapping is null

当把此表的同步mv删除后,再explain查看,发现命中了异步mv

所以查询会优先命中同步mv 再退而求其次命中异步mv是吗?
那假如有个case是同步mv的数据体积比异步mv的体积大很多呢,那走到异步mv性能会好很多

1 Answers

在3.0的版本,同步和异步物化视图会使用相同的透明改写逻辑,统一在cbo阶段进行改写,改写成功后,由代价模型选择使用同步还是异步物化视图,如果异步物化视图更优,就会使用异步物化视图。
对于2.1.x的版本,同步物化视图的改写在rbo阶段,异步物化视图的透明改写在cbo阶段。先进行rbo,再进行cbo。rbo阶段同步物化视图改写完之后,表的字段名称会加上mv_前缀,导致cbo中异步物化视图改写失败。