可以选择多种优化模式作为PolarDB PostgreSQL版(兼容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行的检索。
ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS_10;
OPTIMIZER_MODE参数的当前值可使用SHOW命令显示。请注意,此命令是从属于实用程序的命令。在PSQL中,SHOW命令使用如下:
SHOW OPTIMIZER_MODE;
optimizer_mode
----------------
first_rows_10
(1 row)
以下示例显示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)