WEB开发网
开发学院数据库Oracle Oracle数据库11g新特性:自适应游标与SQL计划管理... 阅读

Oracle数据库11g新特性:自适应游标与SQL计划管理

 2008-12-16 13:03:23 来源:WEB开发网   
核心提示:到目前为止,很多人都已经了解大量使用绑定变量来提高性能的方法;对于尚不清楚这种方法的用户,Oracle数据库11g新特性:自适应游标与SQL计划管理,我将尽力以最简单的方式介绍该方法的核心概念,(同时,假设查询按以下方式编写:select count(1)from customerswhere state_code =

到目前为止,很多人都已经了解大量使用绑定变量来提高性能的方法;对于尚不清楚这种方法的用户,我将尽力以最简单的方式介绍该方法的核心概念。(同时,我还建议您访问 Tom Kyte 的 asktom.oracle.com.在那里,您将了解使用绑定变量改善 SQL 语句性能的重要性,以及如何在几种语言中使用这些变量。)

假定您的 CUSTOMERS 表拥有一个名为 STATE_CODE 的列,该列使用美国州名两位字母的缩写存储客户所在州的信息,如 CT、NY 等等。如果希望找出来自康涅狄格州 ('CT') 且购买次数达三次以上的客户的数量,您最可能执行以下查询:

select count(1)
from customers
where state_code = 'CT'
and times_purchased > 3;

当您执行上述查询时,Oracle 必须执行分析活动,为您执行的 SQL 语句生成执行计划。分析过后,即可执行查询。在概念上,分析与编译软件中的代码类似;如果您使用 C++ 编写代码,则不能在操作系统中运行这些代码 - 首先,您必须编译这些代码,使它们成为可执行文件。分析活动从 SQL 语句中生成可执行文件。

现在,假设另一位用户发布了如下所示的语句:

select count(1)
from customers
where state_code = 'NY'
and times_purchased > 3;

该语句几乎与上述查询完全相同,除了一点:搜索的 state_code 为 NY 而非 CT.理想情况下,分析过的代码与前一查询相同,且将在运行时应用文字值。但 Oracle 将查询的编写方式解释为不同的方式,因此必须再次对第二个查询进行分析。

假设查询按以下方式编写:

  select count(1)
from customers
where state_code = <StateCode>
and times_purchased > 3;

第一个查询和第二个查询将分别传递 CT 和 NY 作为 <StateCode> 的值。此时,不必重新对查询进行分析。

1 2 3 4 5 6  下一页

Tags:Oracle 数据库 特性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接