当我遇到这个查询时,我正在整理一些sql语句:
SELECT
jm.IMEI ,
jm.MaxSpeedKM ,
jm.MaxAccel ,
jm.MaxDeccel ,
jm.JourneyMaxLeft ,
jm.JourneyMaxRight ,
jm.DistanceKM ,
jm.IdleTimeSeconds ,
jm.WebUserJourneyId ,
jm.lifetime_odo_metres ,
jm.[Descriptor]
FROM dbo.Reporting_WebUsers AS wu WITH (NOLOCK)
INNER JOIN dbo.Reporting_JourneyMaster90 AS jm WITH (NOLOCK) ON wu.WebUsersId = jm.WebUsersId
INNER JOIN dbo.Reporting_Journeys AS j WITH (NOLOCK) ON jm.WebUserJourneyId = j.WebUserJourneyId
WHERE ( wu.isActive = 1 )
AND ( j.JourneyDuration > 2 )
AND ( j.JourneyDuration < 1000 )
AND ( j.JourneyDistance > 0 )
我的问题是,对于上面的查询,连接的顺序是否会对性能产生影响
FROM dbo.Reporting_JourneyMaster90 AS jm
然后将其他两个表连接到那个表中
发布于 2013-05-03 14:18:36
不是,按顺序连接在优化过程中会发生变化。
唯一需要注意的是选项FORCE ORDER,它将强制连接按照您指定的顺序进行。
发布于 2014-01-09 12:52:27
SQL2008R2服务器中的联接顺序无疑会影响查询性能,特别是在有大量表联接且where子句应用于多个表的查询中。
尽管在优化过程中连接顺序发生了变化,但优化器并不会尝试所有可能的连接顺序。当它找到它认为可行的解决方案时,它就会停止,因为优化的行为使用了宝贵的资源。
我们已经看到,仅仅通过改变连接表达式的顺序,性能就像狗一样的查询(1分钟+执行时间)下降到亚秒级的性能。但是,请注意,这些查询包含12到20个连接和几个表上的where子句。
诀窍是设置您的顺序,以帮助查询优化器找出什么是有意义的。您可以使用Force Order,但这可能太严格了。尽量确保您的联接顺序从表开始,在这些表中,where子句将最大程度地减少数据。
发布于 2014-11-15 16:48:46
我有一个明确的内部连接影响性能的例子。它是两个表之间的简单连接。一个有50+百万条记录,另一个有2,000条记录。如果我从较小的表中选择并加入较大的表,则需要5+分钟。
如果我从较大的表中选择并加入较小的表,则需要2分30秒。
这是针对SQL Server 2012的。
对我来说,这是违反直觉的,因为我在初始查询中使用的是最大的数据集。
https://stackoverflow.com/questions/16360860
复制相似问题