gpt4 book ai didi

sql - 有没有办法强制 Oracle 在不使用提示的情况下更改查询计划?

转载 作者:行者123 更新时间:2023-12-04 23:44:25 24 4
gpt4 key购买 nike

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

最佳答案

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

  1. SQL 计划基准 - 将一个计划替换为另一个计划。
  2. SQL 配置文件 - 在计划中添加“纠正”提示。例如,配置文件可能会说“此连接返回的行数是预期的 100 倍”,这间接地改变了计划。
  3. Stored Outline - 与 SQL Plan Baseline 类似,但功能较少。此选项使用更简单,但功能较弱且不再受支持。
  4. DBMS_STATS.SET_X_STATS - 手动修改表、列和索引统计信息可以通过人为地使对象看起来或多或少昂贵来显着改变计划。
  5. session 控制 - 例如 alter session set optimizer_features_enable='11.2.0.3';。并不总是有有用的参数。但是其中一个 OPTIMIZER_* 参数可能会有所帮助,或者您可以使用未记录的提示更改计划或禁用如下功能:alter session set "_fix_control"='XYZ:OFF';
  6. 系统控制 - 与上述类似,但适用于整个系统。
  7. DBMS_SPD - SQL 计划指令类似于配置文件,因为它向优化器提供一些纠正信息。但这适用于所有计划的较低级别,并且是 12c 的新功能。
  8. DBMS_ADVANCED_REWRITE - 将一个查询更改为另一个查询。
  9. 虚拟专用数据库 - 通过添加谓词将查询更改为另一个查询。它并非旨在提高性能,但您可能会滥用它来更改索引访问路径。
  10. SQL 翻译框架 - 将一个查询更改为另一个查询,甚至在它被解析之前。这会导致完全“错误”的 SQL 运行。
  11. SQL 补丁 (dbms_sqldiag internal.i_create_patch) - 将一个查询更改为另一个查询。与 DBMS_ADVANCED_REWRITE 类似,但它没有文档,可能更强大。

关于sql - 有没有办法强制 Oracle 在不使用提示的情况下更改查询计划?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30336688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com