【问题标题】:Full hint on table inside a view视图内表格的完整提示
【发布时间】:2018-12-03 16:12:56
【问题描述】:

我正在使用 Orace 11g。

假设我有一个包含表的视图,以及对该视图的查询。

查询视图时如何在内表上添加完整提示?

有没有办法在视图上添加提示?

例子:

-- View V contains table T
create or replace view V as
select *
from   T
where  col1 > 1000
and    col2 <> 'David';

-- My query
select *
from   V
where  col3 < 999;

【问题讨论】:

  • 我对非物化视图的理解是,它的性能只会反映底层表正在做什么。因此,您可以尝试在基础表上添加提示。
  • 很多查询都使用此视图。我只想更改该查询,因为我不想伤害其他查询。
  • 你能创建一个物化视图吗?我很确定您可以随意调整该视图。

标签: oracle query-performance sql-view


【解决方案1】:

如果您直接在视图上提供提示,它应该可以工作:

select /*+ full(v) */ *
  from v
 where col3 < 999;

如果这不起作用,您还可以在视图定义中使用包含 qb_name 提示,然后在外部查询中引用它:

create or replace view v as
   select /*+ qb_name(myblock)*/ *
     from t
    where col1 > 1000
      and col2 <> 'David';

select /*+ full(t@myblock) */ *
  from v
 where col3 < 999;

【讨论】:

  • 您的第一个解决方案将在视图中的所有表上执行完整...在此示例中只有一个表。如果还有更多呢?我正在寻找一个不接触视图的解决方案。仅限外部查询。
  • 您可以将 QB_NAME 提示添加到视图定义中,而不会对任何现有代码产生任何影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多