有两种方法来优化Oracle的优化器,即基于规则的优化(RBO)和基于成本的优化(基于成本的优化,简称CBO)。在Oracle8及以后的版本中,Oracle强烈建议使用CBO的公式。

RBO优化器模式:当SQL语句分析,如下一些被安排在Oracle的规则。我们这样做,例如,指数当WHERE子句中的列有一个索引。

CBO模式:它是陈述的价格(成本),这里的成本主要是指CPU和内存。当优化器决定是否采用这种方式,主要参考的是表和索引的统计信息,统计给出的尺寸表信息的行数,每一行的长度,等等。这些统计信息不在图书馆首先。经过分析后没有出现。许多延迟的统计信息会使优化器做出错误的执行计划,因为有些信息应该及时更新。

注:去指数不一定是最好的,如一个表有两行数据,一个IO可以完成整个检索表,而走索引是两个IO,那么全表扫描(全表扫描)是最好的

优化模型包括四种方法:规则、选择、第一行和所有行。

规则:基于规则的方法。

Choolse:这是Oracle使用了默认的方式。这意味着,当一个表或索引的统计信息,它对CBO的方式。如果表或索引没有统计信息的表,是不是很小,如果相应的列有索引,然后指数和RBO方式。

第一行:类似于选择模式。不同之处在于,当表具有统计信息时,它将以最快的方式返回到前几行,并在一般情况下减少响应时间。

所有行:也是我们调用成本的方式。当一个表的统计信息,它将以最快的方式表的所有行,提高查询的总吞吐量。没有统计信息在RBO方式。

选择了哪种优化模型:

一、实例,我们可以设置optimizer_mode =规则/选择/ first_rows / all_rows在初始化参数文件,如果没有设置optimizer_mode参数,默认的方法是选择。

B,会话级别设置的更改会话设置optimizer_mode =规则/选择 / / all_rows first_rows。

c,提示(语句级+ + +…*设置)

为什么其中一个字段已明确索引,但执行计划不接受索引

1。优化模式是all_rows方式

2。表已经分析过了,而且有统计信息(很可能,统计信息是错误的)。

三.这张桌子很小。正如上面提到的,Oracle优化器认为它不值得索引。

我们可以查看表或索引是否是统计信息。

复制代码如下:SELECT * FROM user_tables

在table_name =

和num_rows不空;

SELECT * FROM user_indexes

在table_name =

和num_rows不空;

在使用CBO时,应及时更新表和索引的统计信息,避免实际的执行计划。

复制代码代码如下:table_name计算统计分析表;

index_name估计统计分析指标;