当我遇到这个查询时,我正在整理一些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
然后将另外两张表加入到该表中
SQL2008R2 服务器中的联接顺序无疑会影响查询性能,特别是在存在大量表联接且对多个表应用了 where 子句的查询中。
尽管连接顺序在优化中发生了变化,但优化器不会尝试所有可能的连接顺序。当它找到它认为可行的解决方案时,它就会停止,因为优化行为本身就使用了宝贵的资源。
我们已经看到,仅仅通过更改连接表达式的顺序,执行得像狗一样的查询(1 分钟 + 执行时间)就可以降低到亚秒级的性能。但请注意,这些查询在多个表上有 12 到 20 个联接和 where 子句。
诀窍是设置顺序以帮助查询优化器找出有意义的内容。您可以使用强制命令,但这可能过于严格。尝试确保您的连接顺序从通过 where 子句减少数据最多的表开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)