对PL / SQL Developer中的SQL成本感到困惑

时间:2014-08-11 12:52:12

标签: sql oracle plsqldeveloper sql-execution-plan

Select pn.pn_level_id From phone_number pn Where pn.phone_number='15183773646'


Select pn.pn_level_id From phone_number pn Where pn.phone_number=' 15183773646'

你认为它们是一样的吗?不可以。基本上它们在PL / SQL Devloper中并不相同。

enter image description here enter image description here

我想知道为什么后者的成本低于之前的sql。 任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

成本不一样,因为计算成本时,计划员会考虑可用的统计数据。统计数据包含其频率最常出现在列中的值。它允许规划人员更好地估计将要获取的行数,并决定如何更好地获取数据(例如,通过顺序扫描或通过索引)。

在您的情况下,值15183773646可能是最常出现的,这就是为什么规划器估计与涉及它的查询不同(因为规划者对这些行的数量有更好的估计)与其基本猜测的其他值相比。 / p>

答案 1 :(得分:0)

优化器评估提取数据的所有方法,因为数据库没有pn.phone_number=' 15183773646',并且该值未存储在索引中,因此Oracle跳过一个I / O操作,这就是为什么第二个成本是以下。