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?
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?
有不同的算法,取决于数据库服务器、索引和数据顺序(集群 PK)、计算值是否连接等。
查看大多数 SQL 系统可以为查询创建的查询计划,它应该让您了解它的作用。
在 MS Sql 中,根据表(它们的大小、可用的索引类型等),在不同情况下将使用不同的连接算法。我想其他数据库引擎也使用各种算法。
Ms Sql 使用的主要连接类型有:
- 嵌套循环连接
- 合并连接
- 哈希连接
您可以在此页面上阅读有关它们的更多信息:Msdn -Advanced Query Tuning Concepts
如果您让 SQL 显示查询的“执行计划”,您将能够看到在不同情况下使用的连接类型。
这取决于您使用的数据库、您要加入的数据库(大/小、顺序/随机、索引/非索引等)。
例如,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(提示)
在这种情况下,您应该看到如何在 b-tree 中保存数据,我认为您会理解 JOIN 算法。
全基于集合论,已经有一段时间了。尽量不要在任何时候链接太多的表,似乎所有的扫描都消耗了数据库资源。索引有助于提高性能,查看一些 sql 站点并搜索优化 sql 查询以获得一些见解。SQL Management Studio 具有一些通常很有趣的内置执行计划实用程序,尤其是对于大型复杂查询。
优化器将(或应该)选择最快的连接算法。
然而,有两种不同的确定什么是快的:
如果您想尽快返回所有行,优化器通常会选择散列连接或合并连接。如果您想尽快返回前几行,优化器将选择嵌套循环连接。
它创建两个表的笛卡尔积,然后从中选择行。阅读有关数据库的 Korth 书籍。