SQL Server 2005 – 内部联接的顺序

我在Where子句中有一个包含三个内连接语句的查询.查询大约需要2分钟才能执行.如果我只是改变两个内连接的顺序,性能下降到40秒.

除了改变内连接的顺序之外怎么做才能对查询性能产生如此巨大的影响?我原本以为优化器会想出这一切.

解决方法

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

但是,实际上,如果它是一个复杂的查询,当优化器没有探索所有选项(理论上可能需要几个月)时,它可以在实践中.

一个选择是,如果你重新排序并得到不同的结果,它是一个非常不同的查询,但这通常是使用OUTER JOINs.

它也可以是指定ON子句的方式如果重新排序FROM子句,它必须改变.除非您使用旧的(和坏的)JOIN-in-the-WHERE子句.

最后,如果这是一个问题,您可以使用括号来更改评估顺序,以使您的意图明确,比如,首先过滤大表以生成派生表.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...