sql引擎执行查询所遵循的步骤是什么?

时间:2009-05-08 07:27:26

标签: sql inner-join internal

我的问题不是如何在sql中使用内连接。我知道表a和表b之间的匹配方式。

我想问一下内部工作的内部工作方式。它涉及什么算法?加入多个表时内部会发生什么?

7 个答案:

答案 0 :(得分:2)

有不同的算法,具体取决于数据库服务器,索引和数据顺序(聚类PK),是否加入计算值等。

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

答案 1 :(得分:2)

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

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

您可以在此页面上详细了解它们:Msdn -Advanced Query Tuning Concepts

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

答案 2 :(得分: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(提示)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

  1. 您可以衡量返回所有所连接行所需的时间。
  2. 您可以衡量返回第一个已加入行所需的时间。
  3. 如果要尽快返回所有行,优化器通常会选择散列连接或合并连接。如果要尽可能快地返回前几行,优化器将选择嵌套循环连接。

答案 6 :(得分:-2)

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