Sql 有没有办法强制Oracle更改查询';不使用提示的计划?

Sql 有没有办法强制Oracle更改查询';不使用提示的计划?,sql,oracle,indexing,oracle11g,tags,Sql,Oracle,Indexing,Oracle11g,Tags,我有一个使用错误索引的查询。我可以看出,使用索引,oracle无法轻松获取数据。查询是由供应商软件构建的,无法更改。有没有办法强迫oracle在没有提示的情况下更改解释计划。 任何帮助都将不胜感激。至少有11种方法可以在不修改查询的情况下控制计划。它们大致按用途顺序列在下面: SQL计划基线-将一个计划替换为另一个计划 SQL概要文件-在计划中添加“纠正”提示。例如,配置文件可能会说“此连接返回的行数比预期的多100倍”,这会间接更改计划 存储的大纲-与SQL计划基线的想法类似,但功能较少。此选

我有一个使用错误索引的查询。我可以看出,使用索引,oracle无法轻松获取数据。查询是由供应商软件构建的,无法更改。有没有办法强迫oracle在没有提示的情况下更改解释计划。
任何帮助都将不胜感激。

至少有11种方法可以在不修改查询的情况下控制计划。它们大致按用途顺序列在下面:

  • SQL计划基线-将一个计划替换为另一个计划
  • SQL概要文件-在计划中添加“纠正”提示。例如,配置文件可能会说“此连接返回的行数比预期的多100倍”,这会间接更改计划
  • 存储的大纲-与SQL计划基线的想法类似,但功能较少。此选项使用更简单,但功能不太强大,不再受支持
  • DBMS\u STATS.SET\u X\u STATS-手动修改表、列和索引统计信息可以通过人为地使对象看起来更昂贵或更便宜而显著改变计划
  • 会话控制-例如
    alter Session set optimizer_features_enable='11.2.0.3'。并非总是有有用的参数。但其中一个优化器参数可能会有所帮助,或者您可以使用未记录的提示更改计划,或者禁用如下功能:
    alter session set“\u fix\u control”='XYZ:OFF'
  • 系统控制与上述类似,但适用于整个系统
  • DBMS_SPD-SQL计划指令类似于概要文件,因为它向优化器提供了一些纠正信息。但这在所有计划中都是在较低的层面上起作用的,而且对12c来说是新的
  • DBMS\u ADVANCED\u REWRITE将一个查询更改为另一个查询
  • 虚拟专用数据库-通过添加谓词将一个查询更改为另一个查询。它不是为了提高性能,但您可能会滥用它来更改索引访问路径
  • SQL翻译框架-在解析查询之前,将查询更改为另一个查询。这可能导致运行完全“错误”的SQL
  • SQL修补程序(dbms\u sqldiag internal.i\u create\u Patch)将一个查询更改为另一个查询。与DBMS_ADVANCED_REWRITE类似,但它没有文档记录,可能功能更强大

  • 分析/估计统计数据?如果您不能更改查询,那么您可能就无能为力(除了添加/删除索引)。检查企业管理器(也称为“网格控制”)计划一项调优任务非常容易,应该可以发现更好的计划。你是说你认为Oracles计划是错误的吗?首先确认一个不同的计划更有效(通过提示),然后尝试找出为什么它会提出这样一个无效的计划(通常是因为不正确的统计数据),这是很有用的