Oracle 计划成本应该小于100吗?

Oracle 计划成本应该小于100吗?,oracle,performance,sql-execution-plan,sql-optimization,Oracle,Performance,Sql Execution Plan,Sql Optimization,我知道成本越低,速度越快。但最近我遇到了一个说法,成本应该始终低于100。这是真的吗 据我所知,成本与(IO操作/CPU使用/使用的网络资源)成比例。这意味着当我说成本很高时,这三种操作(即IO操作/CPU使用率/网络资源使用率)中的任何一种/所有操作都可能很高。这是正确的吗?成本应该是准确的。除非我们讨论的是从10053跟踪检查同一查询的不同计划,否则我们更担心的是准确性,而不是成本是低还是高 如果有一个查询涉及数百万行并执行一系列聚合,那么一个成本为10的计划可能效率很低。从逻辑上讲,您知道

我知道成本越低,速度越快。但最近我遇到了一个说法,成本应该始终低于100。这是真的吗


据我所知,成本与(IO操作/CPU使用/使用的网络资源)成比例。这意味着当我说成本很高时,这三种操作(即IO操作/CPU使用率/网络资源使用率)中的任何一种/所有操作都可能很高。这是正确的吗?

成本应该是准确的。除非我们讨论的是从10053跟踪检查同一查询的不同计划,否则我们更担心的是准确性,而不是成本是低还是高

如果有一个查询涉及数百万行并执行一系列聚合,那么一个成本为10的计划可能效率很低。从逻辑上讲,您知道查询将非常昂贵。如果优化器认为查询非常便宜,这几乎保证了您的统计数据是不准确的。如果您的统计数据不准确,这意味着优化器将选择一个效率低于预期的计划。就我个人而言,如果我发现更多需要关注的问题,注意到成本太低,而不是注意到成本太高,我不会感到惊讶


选择任何一种成本截止线都是荒谬的。如果您知道每个查询都将是一个OLTP应用程序的一部分,该应用程序将获取几十行数据,那么再看一看成本为数千的计划,看看优化器是否因为统计数据无效而选择了一个错误的计划,这可能是有意义的。但是,很少有系统只有这种非常特殊的OLTP查询——大多数系统缺少返回一行或两行的非常便宜的查询,以及读取和聚合更多行的更昂贵的查询。创建任何类型的cap都会导致开发人员做一些愚蠢的事情——将“廉价”查询放入循环中,而不是编写“昂贵”的联接,这可能意味着所有查询的成本都很低,但整个系统的运行效率却远低于此。

不,这句话完全是胡说八道!对于同一查询,成本仅在将一个计划与另一个计划进行比较时才有意义。对于一些返回巨大结果集的查询来说,10000000的开销可能是可以接受的。谢谢Tony。我对成本的理解正确吗?正如你所说的“成本只有在同一个查询中比较一个计划和另一个计划才有意义”,这意味着以千计的成本没有什么错。这意味着我们应该尽可能降低成本?是的,在其他条件相同的情况下,如果您的数据库统计数据足够准确,低成本的计划应该比高成本的计划表现更好。可能谢谢你,贾斯汀。你说“成本为10的计划可能效率很低”这是否意味着计划效率也取决于成本以外的其他参数?你还说“如果优化器认为查询非常便宜,这几乎保证了你的统计数据是不准确的”我不确定统计数据在这里意味着什么?