如果我们在联接查询中切换表的位置会增加加载数据的速度,这是真的吗?

时间:2018-12-26 06:08:13

标签: sql

例如:

在表a中,我们有 1000000 行 在表b中,我们有 5

如果我们使用它会更快

  

从b内部连接中选择* a在b.id = a.id上

  

从a.id = b.id上的内部联接b中选择*

2 个答案:

答案 0 :(得分:0)

不,JOIN顺序无关紧要,查询引擎将基于索引和其他内容的统计信息重新组织其顺序。在优化过程中,按订单的JOIN会更改。

您可以自己进行全部测试,下载一些测试数据库,例如AdventureWorks或Northwind,或者在数据库上进行尝试,您可以这样做:

  • 选择显示实际执行计划并运行第一个查询
  • 更改JOIN顺序,然后再次运行查询
  • 比较执行计划

它们应该相同,因为查询引擎会根据其他因素重新组织它们。

唯一需要注意的是选项 FORCE ORDER 。该选项将强制按照您指定的确切顺序进行连接。

答案 1 :(得分:0)

这不太可能。连接两个表的速度有很多因素。这就是为什么数据库引擎具有优化阶段,其中他们考虑实现查询的不同方式。

有很多不同的选择:

  • 嵌套循环,先扫描b,然后再扫描a
  • 嵌套循环,先扫描a,然后再扫描b
  • 对两个表进行排序并使用合并联接。
  • 同时哈希两个表并使用哈希联接。
  • 使用b.id上的索引。
  • 使用a.id上的索引。

这些只是高级描述-有多种方法可以实现其中一些方法。还可以对表进行分区,从而增加了复杂性。

加入顺序只是考虑因素之一。

在这种情况下,查询的结果可能取决于所返回数据的大小,而不是取决于用于获取数据的实际算法。