首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >加入策略到底是什么?

加入策略到底是什么?
EN

Stack Overflow用户
提问于 2017-08-01 04:09:05
回答 1查看 798关注 0票数 0

我目前正在阅读查询优化器是如何工作的,我经常遇到短语“联接策略”,并且查询优化器将它包含在成本计算中。

加入策略到底是什么?有什么例子吗?

对于具有单个联接的查询,这是否意味着该查询有多个可能的“连接策略”?还是这只适用于具有多个联接的查询?

当我们讨论具有多个联接的查询的连接策略时,这到底是如何工作的呢?

我一直认为,在解决多个联接时,首先解决第一个联接,然后再将结果集连接到下一个联接,以此类推。加入策略真的会改变订单吗?这不会影响结果吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-01 04:22:05

我一直认为,在解决多个联接时,首先解决第一个联接,然后再将结果集连接到下一个联接,以此类推。加入策略真的会改变订单吗?这不会影响结果吗?

不以不同的顺序加入和过滤不会改变结果。但是它会影响结果的速度,这就是为什么顺序经常在内部改变的原因。

您使用的是Server吗?按CTRL键查看查询计划。在某种程度上这是一个特定于产品的答案但是..。

对我来说,“连接策略”是如何满足连接的。

例如,您可以使用散列连接或循环连接。

您可以在联接之前或之后筛选数据。

查询规划器通常会重新排列联接和筛选,以生成它认为最快的结果。这通常意味着提前过滤,并对生成尽可能少行的联接进行评估。

例如,如果您要加入大型表AB,并在表AB上使用where筛选器,并且查询计划器认为应用该筛选器将减少表A上的记录数,但不会减少表B上的记录数,则可能首先筛选表A以减少记录数量,然后可能使用循环连接(当将一个大表连接到一个小表时,这是最有效的)将过滤后的记录从A连接到B中更多的记录。

提交的SQL语句中的联接顺序与它们在计划中实际执行的顺序无关。(除非在甲骨文中使用ordered提示),而且仍然得到相同的答案

where子句中的任何筛选器都可以在联接之前或之后应用(通常是在可能的情况下),并且仍然会得到相同的答案。

因此,连接策略是将“声明性”SQL语句(这正是我想要的)转换为生成它的实际物理步骤的方法(筛选此表,然后与该表连接等等)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45428828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档