Oracle数据库11g新特性:自适应游标与SQL计划管理
2008-12-16 13:03:23 来源:WEB开发网优化程序选择对 CUSTOMERS 表进行全表扫描。当我们仅搜索 CT(其数量只占记录总数的 5%)时,难道不应该使用索引吗?是什么原因使优化程序选择全表扫描而非索引扫描呢?
答案是一种称为绑定观察 的现象。先前,当您使用设置为 'NY' 的绑定变量值运行该查询时,优化程序必须为查询的第一次运行进行艰难的分析。在这样做的同时,优化程序观察绑定变量来确定为其分配的值。该值是 'NY'.由于 'NY' 的数量大约占总行数的 95%,优化程序选择了全表扫描(与预期的情况相同)。另外,它还冻结了查询的计划。接下来,当我们使用设置为 'CT' 的变量值运行同一个查询时,优化程序不会重新计算计划,而是使用了与之前相同的计划,即使该计划不是满足目标的最佳方案。如果您在查询中使用了文字值 'CT' 而非绑定变量,那么优化程序会选择正确的计划。
因此,如您所见,尽管绑定变量在大多数情况下都非常有效,当值的选择性将显著影响计划时(正如在此示例中,值 'CT' 和 'NY' 的选择性分别为 5% 和 95%),绑定变量并不可靠。如果数据分布均匀,所有值的选择性几乎相同,执行计划将保持不便。因此,聪明的 SQL 编码人员将会选择在何时打破使用绑定变量的基本准则,改用文字值。
自适应游标
但如果您没有很多聪明的编码人员,或者没有时间重新编写这些语句,该怎么办?Oracle 是否提供了一些智能的替代方案?
是这样的。使用 Oracle 数据库 11g,游标突然拥有了一种新的智能。不是在执行查询的时候盲目使用已缓存的执行计划,而是在绑定变量的值更改时,根据实际情况确定是否需要重新计算计划。如果游标中含有绑定变量,数据库会对其进行观察,确定传递给变量的值的类型以及是否需要重新计算计划。如果需要重新计算计划,则游标标记为 "Bind-Sensitive".
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接