当前位置: 首页 > 面试题库 >

SQL Server 2005-内部联接顺序

胡禄
2023-03-14
问题内容

我有一个查询,其中Where子句中包含三个内部join语句。该查询大约需要2分钟才能执行。如果仅更改两个内部联接的顺序,性能将下降到40秒。

除了更改内部联接的顺序外,什么都不做会对查询性能产生如此大的影响?我本以为优化器会解决所有这些问题。


问题答案:

SQL是声明性的,也就是说,JOIN顺序无关紧要。

但是,实际上,如果优化器未探究所有选项(理论上可能要花费数月),这是否是一个复杂的查询就可以了。

另一个选择是,如果您重新排序并获得不同的结果,这将是一个非常不同的查询,但这通常与OUTER JOINs一起使用。

这也可能是指定ON子句的方式。如果对FROM子句重新排序,则必须更改它。除非您使用的是较旧(且较差)的JOIN-in-the-WHERE子句。

最后,如果您担心,可以使用括号更改评估顺序以使您的意图明确,例如,首先对大表进行过滤以生成派生表。



 类似资料:
  • 如何在Hibernate中编写此SQL查询?我想使用Hibernate创建查询,而不是创建数据库。 我在SQLServer2008中创建了实体类, 我尝试用多种方法构建工作选择查询,但仍然不起作用。 也许实体有问题?

  • 问题内容: 如何在Hibernate中编写此SQL查询?我想使用Hibernate创建查询,而不是创建数据库。 我在SQLServer2008中创建了实体类, 我试图以多种方式构建有效的选择查询,但仍然无法正常工作。 实体有问题吗? 问题答案: 连接只能在实体之间存在关联时使用。您的Employee实体不应将名称为,类型为的字段映射到列。它应该与Team实体具有ManyToOne关联,并映射为Jo

  • 问题内容: 我似乎无法内部连接到教师表以获得名字和姓氏。 我收到的错误消息是 问题答案: 以下错误是因为您未指定列: Msg 8156,第16级,状态1,第3行 为“ MaxBookingDays”多次指定了“ ID”列。 因此,我将您的查询稍作更改,如下所示:

  • 本文向大家介绍Microsoft SQL Server 内部联接,包括了Microsoft SQL Server 内部联接的使用技巧和注意事项,需要的朋友参考一下 示例 Inner join根据一个或多个条件(使用ON关键字指定)仅返回在两个表中匹配/存在的记录/行。这是最常见的联接类型。的一般语法为inner join: 也可以简化为JOIN: 例 将内部联接与左侧外部联接一起使用(不存在替代)

  • 本文向大家介绍PHP连接SQLServer2005的方法,包括了PHP连接SQLServer2005的方法的使用技巧和注意事项,需要的朋友参考一下 1.修改php.ini将extension=php_mssql.dll的注释删除保存。 修改php.in将mssql.secure_connection = Off改为mssql.secure_connection = On。 2.下载连接2005的n

  • 问题内容: 我了解内部和外部联接的工作方式。但是,在此上下文中,“内部/外部”一词的含义是什么?内部联接到底是什么?外部联接的外部是什么? 最好的问候,维沙尔 问题答案: 另一个角度: 最早的简单实现之一是使用嵌套循环的联接。 对于内部联接,只要联接列匹配,外部循环将遍历任何关系,内部循环将遍历其他关系并创建复合行。因此,将在内部循环中创建并填充输出行。因此,这称为INNER JOIN。 当我们希