如果我们使用 predicate 对视图进行查询,db服务器是否会将 predicate 推到视图的查询下面?

tzxcd3kk  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(427)

我使用的是mysql,我有一个复杂的视图,这导致了性能问题。
视图3的定义 select * from view_1 union select * from view_2 现在,当我运行一个查询来查看\u3时,如下所示 select * from view_3 where clolumn_a=value; 这是在处理一大组行时,可能正在执行全表扫描,然后返回结果。
那么,做下面这样的查询会更好吗 select * from view_1 where column_a=value union select * from view_2 where column_a=value; 这种视图处理行为在其他sql服务器(如oracle、mssql)中是否保持不变
predicate 会被推到视图的查询下面吗?

cu6pst1q

cu6pst1q1#

是的,视图就像其他语言的“宏”。视图的定义被“扩展”到使用它的查询中,然后整个查询(现在只是由对实际基表的访问组成,没有视图)作为一个整体进行优化。
假设优化器做得很好,它应该能够“向下”推任何 predicate ——如果有与 predicate 匹配的适当索引可用,可能选择使用索引查找而不是表扫描。
如果您想确切地看到优化器对您的查询做了什么,请学习如何获取和读取执行计划。在mysql中,这可以通过 EXPLAIN .

相关问题