暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 解释计划基数和成本

askTom 2017-03-22
938

问题描述

嗨,

我检查了Select查询的EXPLAIN计划 (在SQL Devloper工具中,按F10捷径键),在那里我注意到一列基数与成本。

随着基数的增加,我注意到成本的增加,我读到Optimizer选择了较少的成本计划来执行查询,因此我认为成本是optimzer执行查询所花费的时间。那么这个基数是什么?及其与成本的关系。

专家解答

基数是步骤将返回的估计行数。

成本是计划将要做的工作量的估计。

较高的基数 => 您将获取更多行 => 您将做更多的工作 => 查询将花费更长的时间。因此,成本 (通常) 更高。

在所有其他条件相同的情况下,具有更高成本的查询将使用更多的资源,因此运行时间更长。但是所有的东西很少是平等的。成本较低的查询可以比成本较高的查询运行得更快!

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:313416745628
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:5639863000346345766
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:40112614814595

成本对于弄清楚优化器为什么选择 (例如) 索引上的全表扫描是有用的。但在大多数情况下忽略它。

一个更好的问题是:

“(估计的) 基数是否大致等于语句处理的实际行数?”

如果该计划的所有步骤的答案均为 “是”,则很可能您的查询有 “最佳” 计划。

要弄清楚这一点,你需要执行计划。这显示了处理的行数。有关如何创建这些内容的说明,请参见:

https://blogs.oracle.com/sql/entry/how_to_create_an_execution

然后将估计值与实际值进行比较,看看它们是否接近。注意,您需要将 “开始” 列中的值乘以 “估计” 中的值,以获取要与实际行进行比较的值。

最后说明: 如果您要获取估计时间,请说明计划包括以下内容:

set serveroutput off
explain plan for 
select * from dual;

select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT                                                           
Plan hash value: 4017058736                                                 
                                                                            
--------------------------------------------------------------------------  
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |  
--------------------------------------------------------------------------  
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |  
|   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |  
--------------------------------------------------------------------------


请记住: 这是一个估计值,只有一秒钟!
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论