可以选择多种优化模式作为 POLARDB for Oracle 数据库群集的默认设置。通过使用 ALTER SESSION 命令以及优化器提示中单独的 DELETE、SELECT 和 UPDATE 命令,还可以在每个会话的基础上更改此设置。控制这些默认模式的配置参数名为 OPTIMIZER_MODE。下表显示可能的值。

提示 说明
ALL_ROWS 优化结果集所有行的检索。
CHOOSE 不基于要从结果集中检索的假定行数进行默认优化。这是默认值。
FIRST_ROWS 优化仅结果集第一行的检索。
FIRST_ROWS_10 优化结果集前 10 行的检索。
FIRST_ROWS_100 优化结果集前 100 行的检索。
FIRST_ROWS_1000 优化结果集前 1000 行的检索。
FIRST_ROWS(n) 优化结果集前n行的检索。此形式不得用作ALTER SESSION SET OPTIMIZER_MODE命令的对象。它只能在SQL命令中以提示的形式使用。

这些优化模式基于以下假设:提交 SQL 命令的客户端只想查看结果集的前“n”行,然后将放弃结果集的其余部分。分配给查询的资源也会如此调整。

示例

更改当前会话以优化结果集前 10 行的检索。

LTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS_10;

OPTIMIZER_MODE 参数的当前值可使用 SHOW 命令显示。请注意,此命令是从属于实用程序的命令。在 PSQL 中,SHOW 命令使用如下:

SHOW OPTIMIZER_MODE;

optimizer_mode
----------------
 first_rows_10
(1 row)

SHOW 命令与 Oracle 数据库兼容,具有以下语法:

SHOW PARAMETER OPTIMIZER_MODE;

NAME
--------------------------------------------------
VALUE
--------------------------------------------------
optimizer_mode
first_rows_10

以下示例显示 SELECT 命令中使用的优化模式作为提示:

SELECT /*+ FIRST_ROWS(7) */ * FROM emp;

 empno | ename  |    job    | mgr  |      hiredate      |   sal   |  comm   | deptno
-------+--------+-----------+------+--------------------+---------+---------+--------
  7369 | SMITH  | CLERK     | 7902 | 17-DEC-80 00:00:00 |  800.00 |         |     20
  7499 | ALLEN  | SALESMAN  | 7698 | 20-FEB-81 00:00:00 | 1600.00 |  300.00 |     30
  7521 | WARD   | SALESMAN  | 7698 | 22-FEB-81 00:00:00 | 1250.00 |  500.00 |     30
  7566 | JONES  | MANAGER   | 7839 | 02-APR-81 00:00:00 | 2975.00 |         |     20
  7654 | MARTIN | SALESMAN  | 7698 | 28-SEP-81 00:00:00 | 1250.00 | 1400.00 |     30
  7698 | BLAKE  | MANAGER   | 7839 | 01-MAY-81 00:00:00 | 2850.00 |         |     30
  7782 | CLARK  | MANAGER   | 7839 | 09-JUN-81 00:00:00 | 2450.00 |         |     10
  7788 | SCOTT  | ANALYST   | 7566 | 19-APR-87 00:00:00 | 3000.00 |         |     20
  7839 | KING   | PRESIDENT |      | 17-NOV-81 00:00:00 | 5000.00 |         |     10
  7844 | TURNER | SALESMAN  | 7698 | 08-SEP-81 00:00:00 | 1500.00 |    0.00 |     30
  7876 | ADAMS  | CLERK     | 7788 | 23-MAY-87 00:00:00 | 1100.00 |         |     20
  7900 | JAMES  | CLERK     | 7698 | 03-DEC-81 00:00:00 |  950.00 |         |     30
  7902 | FORD   | ANALYST   | 7566 | 03-DEC-81 00:00:00 | 3000.00 |         |     20
  7934 | MILLER | CLERK     | 7782 | 23-JAN-82 00:00:00 | 1300.00 |         |     10
(14 rows)