分类: DB2/Informix
2008-05-31 18:26:18
优化器指令
优化器针对每个查询计算最优查询计划。即使优化器使用了大量统计信息,一些情况下仍然无法做出最佳的决策。要重写优化器决策,您可以使用优化器指令来强制优化器使用指定的查询计划。
优化器指令通常针对当前查询的范围。要查看指令的工作方式,您可以使用 SET EXPLAIN ON 获得查询计划。要禁用指令,您可以在环境中设定 IFX_DIRECTIVE 0,也可以在 onconfig 中设置 DIRECTIVE 0。
在分隔符之后,每条指令的第一个字符必须是 + 号(加号)。优化器指令紧跟在 SELECT、INSERT 和 UPDATE 关键字后面。
SELECT --+ |
指令包含以下几种类型:
INDEX 、AVOID_FULL 和 AVOID_INDEX 。ORDERED 强制优化器按照查询中使用的顺序使用表。连接方法(Join-method)指令:连接方法指令在嵌套循环和散列连接之间进行选择。其中 USE_NL 和 AVOID_NL 用于嵌套循环连接,而 USE_HASH 和 AVOID_HASH 用于散列连接。ALL_ROWS 和 FIRST_ROWS。FIRST_ROWS 只返回第一个屏幕,其中显示查询返回的行。EXPLAIN 基本上与 SET EXPLAIN ON 相同。AVOID_EXECUTE 仅仅执行查询计划,而不执行查询本身。这一特性使您不必等到查询完成就可以了解查询计划是否符合您的需要,在处理大型表时等待查询完成将耗费很多时间。NESTED 关键字可阻止使用非嵌套子查询重写查询。