我试图优化一个查询,但不太理解Explain Plan返回的一些信息。有人能告诉我OPTIONS和COST列的意义吗?在OPTIONS列中,我只看到一个单词FULL。在COST列中,我可以推断出较低的成本意味着更快的查询。但是成本值具体代表什么以及可接受的阈值是多少呢?
我试图优化一个查询,但不太理解Explain Plan返回的一些信息。有人能告诉我OPTIONS和COST列的意义吗?在OPTIONS列中,我只看到一个单词FULL。在COST列中,我可以推断出较低的成本意味着更快的查询。但是成本值具体代表什么以及可接受的阈值是多少呢?
EXPLAIN PLAN的输出是来自Oracle查询优化器的调试输出。 COST是基于代价的优化器(CBO)的最终输出,其目的是选择运行查询时应使用哪些可能的计划中的一种。 CBO为每个计划计算相对成本,然后选择成本最低的计划。
(注意:在某些情况下,CBO没有足够的时间来评估每个可能的计划;在这些情况下,它只选择到目前为止找到的成本最低的计划)
一般来说,慢查询的最大贡献者之一是读取用于服务查询的行数(更确切地说是块数),因此成本将部分基于优化器估计需要读取的行数。
例如,假设您有以下查询:
SELECT emp_id FROM employees WHERE months_of_service = 6;
(months_of_service
列有一个NOT NULL约束和一个普通索引。)months_of_service=6
)。
2. 读取索引,其中months_of_service=6
(这将得到一组ROWIDs),然后根据返回的ROWIDs访问表。FULL 可能是指全表扫描,这意味着没有使用索引。除非查询需要使用表中的所有行,否则通常表示出现了问题。
Cost 是一个数字,表示不同负载(处理器、内存、磁盘、IO)的总和,高数值通常是不好的。当移动到计划的根时,这些数字会相加,应该检查每个分支以定位瓶颈。
您还可以查询 v$sql 和 v$session 以获取有关 SQL 语句的统计信息,这将提供各种资源、时间和执行的详细指标。