优化目标伪指令

在某些查询中,可能希望仅查找查询结果中的前几行。或者,您可能了解到所有行都必须访问,并从查询中返回。可以使用优化目标伪指令来查找满足查询的第一行或满足查询的所有行。

例如,可能希望仅查找查询结果的前几行,因为 GBase 8s ESQL/C 程序打开一个查询游标并执行 FETCH 以便只查找首行。

使用优化目标伪指令来对以下情况中的任一种情况的查询进行优化:

如果使用 FIRST_ROWS 伪指令,那么优化器可能将提前废弃包含耗时活动的查询计划。例如:散列连接可能会花费大量时间来创建散列表。如果只有几行必须返回,那么优化器可能改为选择嵌套循环连接。

在以下示例中,假定数据库在 employee.dept_no 上有一个索引,而在 department.dept_no 上没有索引。没有伪指令,优化器选择散列连接。
SELECT *
FROM employee, department
WHERE employee.dept_no = department.dept_no 
但是,使用了 FIRST_ROWS 伪指令之后,由于创建散列表所需的初始开销较高,因而优化器选择嵌套循环连接。
SELECT {+first_rows} *
FROM employee, department
WHERE employee.dept_no = department.dept_no