9

My question is not how to use inner join in sql. I know about how it matches between table a and table b.

I'd like to ask how is the internal working of inner working. What algorithm it involves? What happens internally when joining multiple tables?

4

7 回答 7

2

有不同的算法,取决于数据库服务器、索引和数据顺序(集群 PK)、计算值是否连接等。

查看大多数 SQL 系统可以为查询创建的查询计划,它应该让您了解它的作用。

于 2009-05-08T07:38:39.483 回答
2

在 MS Sql 中,根据表(它们的大小、可用的索引类型等),在不同情况下将使用不同的连接算法。我想其他数据库引擎也使用各种算法。

Ms Sql 使用的主要连接类型有:
- 嵌套循环连接
- 合并连接
- 哈希连接

您可以在此页面上阅读有关它们的更多信息:Msdn -Advanced Query Tuning Concepts

如果您让 SQL 显示查询的“执行计划”,您将能够看到在不同情况下使用的连接类型。

于 2009-05-08T07:39:48.263 回答
2

这取决于您使用的数据库、您要加入的数据库(大/小、顺序/随机、索引/非索引等)。

例如,SQL Server 有几种不同的连接算法;循环连接、合并连接、散列连接。使用哪一个由优化器在制定执行计划时确定。有时它会做出错误判断,然后您可以通过使用连接提示来强制执行特定的连接算法。

您可能会发现以下 MSDN 页面很有趣:
http://msdn.microsoft.com/en-us/library/ms191318.aspx(循环)
http://msdn.microsoft.com/en-us/library/ms189313.aspx(哈希)
http://msdn.microsoft.com/en-us/library/ms190967.aspx(合并)
http://msdn.microsoft.com/en-us/library/ms173815.aspx(提示)

于 2009-05-08T07:40:33.957 回答
0

在这种情况下,您应该看到如何在 b-tree 中保存数据,我认为您会理解 JOIN 算法。

于 2009-05-08T07:35:08.603 回答
0

全基于集合论,已经有一段时间了。尽量不要在任何时候链接太多的表,似乎所有的扫描都消耗了数据库资源。索引有助于提高性能,查看一些 sql 站点并搜索优化 sql 查询以获得一些见解。SQL Management Studio 具有一些通常很有趣的内置执行计划实用程序,尤其是对于大型复杂查询。

于 2009-05-08T07:42:48.770 回答
0

优化器将(或应该)选择最快的连接算法。

然而,有两种不同的确定什么是快的:

  1. 您测量返回所有连接行所需的时间。
  2. 您测量返回第一个连接行所需的时间。

如果您想尽快返回所有行,优化器通常会选择散列连接或合并连接。如果您想尽快返回前几行,优化器将选择嵌套循环连接。

于 2009-05-08T07:51:27.190 回答
-2

它创建两个表的笛卡尔积,然后从中选择行。阅读有关数据库的 Korth 书籍。

于 2009-05-08T07:39:08.560 回答