可以選擇多種優(yōu)化模式作為PolarDB PostgreSQL版(兼容Oracle)數(shù)據(jù)庫集群的默認(rèn)設(shè)置。通過使用ALTER SESSION命令以及優(yōu)化器提示中單獨(dú)的DELETE、SELECT和UPDATE命令,還可以在每個(gè)會(huì)話的基礎(chǔ)上更改此設(shè)置。控制這些默認(rèn)模式的配置參數(shù)名為OPTIMIZER_MODE。

下表顯示可能的值。

提示說明
ALL_ROWS優(yōu)化結(jié)果集所有行的檢索。
CHOOSE不基于要從結(jié)果集中檢索的假定行數(shù)進(jìn)行默認(rèn)優(yōu)化。這是默認(rèn)值。
FIRST_ROWS優(yōu)化僅結(jié)果集第一行的檢索。
FIRST_ROWS_10優(yōu)化結(jié)果集前10行的檢索。
FIRST_ROWS_100優(yōu)化結(jié)果集前100行的檢索。
FIRST_ROWS_1000優(yōu)化結(jié)果集前1000行的檢索。
FIRST_ROWS(n)優(yōu)化結(jié)果集前n行的檢索。此形式不得用作ALTER SESSION SET OPTIMIZER_MODE命令的對(duì)象。它只能在SQL命令中以提示的形式使用。

這些優(yōu)化模式基于以下假設(shè):提交SQL命令的客戶端只想查看結(jié)果集的前“n”行,然后將放棄結(jié)果集的其余部分。分配給查詢的資源也會(huì)如此調(diào)整。

示例

更改當(dāng)前會(huì)話以優(yōu)化結(jié)果集前10行的檢索。

ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS_10;

OPTIMIZER_MODE參數(shù)的當(dāng)前值可使用SHOW命令顯示。請(qǐng)注意,此命令是從屬于實(shí)用程序的命令。在PSQL中,SHOW命令使用如下:

SHOW OPTIMIZER_MODE;

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

以下示例顯示SELECT命令中使用的優(yōu)化模式作為提示:

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)