使用 SET OPTIMIZATION 语句来指定查询执行优化器花费多长时间来制定查询计划或指定优化目标。SET OPTIMIZATION 语句是对 SQL 的 ANSI/ISO 标准的扩展。
当您随同 GBase 8s 使用 DB-Access 时,SET OPTIMIZATION 语句的 ENVIRONMENT 选项可为当前会话中的所有语句定义通用的优化环境。
您可在任何时刻执行 SET OPTIMIZATION 语句。在当前的数据库服务器上跨数据库地支持指定的优化级别。您指定的选项保持有效,直到您发出另一 SET OPTIMIZATION 语句或直到程序结束为止。对于查询优化器为确定查询计划而花费的时间量,缺省的数据库服务器优化级别为 HIGH。
在 GBase 8s 上,缺省的优化目标为 ALL_ROWS。虽然在某一时刻您仅可设置一个选项,但您可发出两个 SET OPTIMIZATION 语句:一个指定优化器为确定查询计划所花费的时间,一个指定查询的优化目标。
类似地,您可发出包括 ENVIRONMENT 选项的多个 SET OPTIMIZATION 语句来指定用于优化查询的会话环境。在数据仓库应用中,适当的优化器环境可提升在星型模式中表的连接查询的性能。保持优化器环境设置,直到另一 SET OPTIMIZATION ENVIRONMENT 语句覆盖它们为止,或直到会话结束为止。要获取更多信息,请参阅 ENVIRONMENT 选项 主题。
CONNECT TO 'central@midstate'; SET OPTIMIZATION LOW; SELECT * FROM customer; CLOSE DATABASE; CONNECT TO 'western@rockies'; SET OPTIMIZATION HIGH; SELECT * FROM customer; CLOSE DATABASE; CONNECT TO 'wyoming@rockies'; SELECT * FROM customer;
在此,wyoming 数据库将有 HIGH 优化,因为它驻留在与 western 数据库相同的数据库服务器上。该代码不需要为 wyoming 数据库重新指定优化级别,因为 wyoming 数据库像 western 数据库一样,驻留在 rockies 数据库服务器上。
SET OPTIMIZATION LOW; SET OPTIMIZATION FIRST_ROWS; SELECT lname, fname, bonus FROM sales_emp, sales WHERE sales.empid = sales_emp.empid AND bonus > 5,000 ORDER BY bonus DESC;