如果我们正在使用谓词对视图进行查询,那么DB Server是否将谓词推入下划线视图查询?

时间:2019-01-08 04:47:08

标签: mysql sql predicate sql-view

我正在使用MySQL,并且有一个复杂的视图,这会导致性能问题。

view_3的定义

select * from view_1 union select * from view_2

现在,当我对view_3进行如下查询时

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;

视图处理的这种行为在Oracle,MSSQL等其他SQL服务器中是否保持不变

谓词是否会被推送到下划线的视图查询中?

1 个答案:

答案 0 :(得分:0)

是的,视图就像其他语言中的“宏”一样。视图的定义被“扩展”到使用它的查询中,然后整个查询(现在仅由对实际基表的访问组成,没有视图)被整体优化。

假设优化器在正确地完成工作,它应该能够将任何谓词“压低”-如果可以使用与谓词相匹配的适当索引,则可以选择使用索引查找而不是表扫描。 / p>

如果您想确切地了解优化器对查询做了什么,请学习如何获取和阅读执行计划。在中,这将通过EXPLAIN完成。