我正在编写一份报告,需要从我无权修改的视图中提取数据。视图缺少报表所需的列,因此我尝试将其连接到其中一个源表。但是,这导致执行时间延长两倍。
查看执行计划显示它对表执行两次扫描,并将merge连接在一起。是否有提示可以说服查询优化器只访问该表一次?
答案 0 :(得分:1)
因为优化器永远不会消除查询中指定的表访问,除非实际从该表中引用了任何内容。
没有办法访问表的次数少于查询中引用的次数(据我所知,从13年的经验来看)。可能还有一些其他情况,但我知道查询优化器可以执行的访问次数少于对象引用次数的唯一情况是,当从外部表访问任何内容时,它可以优化掉左外部或右外部联接从约束中可以看出,排除工作不会改变行数或在结果中返回哪些行。