咨询热线020-66889888
诚信为本:市场永远在变,诚信永远不变。

咨询热线

13988888888
手机:020-66889888
电话:13988888888
地址:海南省海口市58号
邮箱:admin@youweb.com

顺达资讯

>>你的位置: 首页 > 顺达资讯

50.5.?规划器/优化器

发布时间:2024-03-11 12:56:58

规划器/优化器从扫描查询中用到的每一个单独的关系(表)开始生成计划。可能的计划根据每一个关系上可用的索引决定。在一个关系上总是有执行一个顺序扫描的可能,因此一个顺序扫描计划总是会被创建。假设在一个关系上定义有一个索引(例如一个B-tree索引)并且查询包含限制。如果正好匹配该B-tree索引的键并且是该索引的操作符类之一,另一个使用B-tree索引扫描该索引的计划将被创建。如果还有索引存在且查询中的限制正好匹配一个索引的键,其他计划也会被考虑。如果有索引的顺序能匹配子句(如果有)或者对于归并连接有用(见下文),也会为该索引创建索引扫描计划。

如果查询需要连接两个或更多关系,在所有扫描单个关系的可能计划都被找到后,连接计划将会被考虑。三种可用的连接策略是:

  • 嵌套循环连接: 对左关系找到的每一行都要扫描右关系一次。这种策略最容易实现但是可能非常耗时(但是,如果右关系可以通过索引扫描,这将是一个不错的策略。因为可以用左关系当前行的值来作为右关系上索引扫描的键)。

  • 归并连接:在连接开始之前,每一个关系都按照连接属性排好序。然后两个关系会被并行扫描,匹配的行被整合成连接行。由于这种连接中每个关系只被扫描一次,因此它很具有吸引力。它所要求的排序可以通过一个显式的排序步骤得到,或使用一个连接键上的索引按适当顺序扫描关系得到。

  • 哈希连接:右关系先被扫描并且被载入到一个哈希表,使用连接属性作为哈希键。接下来左关系被扫描,扫描中找到的每一行的连接属性值被用作哈希键在哈希表中查找匹配的行。

当查询涉及两个以上的关系时,最终结果必须由一个连接步骤树构成,每个连接步骤有两个输入。规划器会检查不同可能的连接序列来找到代价最小的那一个。

如果查询是用的关系数少于geqo_threshold,将使用一次接近穷举的搜索来查找最好的连接顺序。如果任何两个关系在条件中存在一个相应的连接子句(即存在类似于的限制),规划器会有限考虑它们之间的连接。没有任何连接子句的连接对只有在别无选择时才会被考虑,即一个关系没有任何可用的对于其他关系的连接子句。对规划器所考虑的每一个连接对会生成所有可能的计划,其中代价(被估计为)最低的一个将被选择。

当连接关系数超过时,连接序列将考虑通过启发式方法来确定,详见第?59?章。否则处理将和前面相同。

成品计划树包含基本关系的顺序或索引扫描,外加所需的嵌套循环、归并或哈希连接节点,以及任何所需的辅助步骤,例如排序节点或聚集函数计算节点。这些节点中的大部分具有执行选择(丢弃不符合指定布尔条件的行)和投影(根据指定列值计算派生列,即标量表达式的计算)的能力。规划器的职责之一就是在计划树最合适的节点上附加来自于子句的选择条件和需要的输出表达式。

咨询热线:020-66889888
站点分享:
友情链接:
手机:13988888888
电话:020-66889888
地址:海南省海口市58号
Copyright © 2012-2018 顺达注册-顺达娱乐-顺达官方站 版权所有
ICP备案编号:琼ICP备88889999号