gpt4 book ai didi

sql - Sql JOIN顺序会影响性能吗?

转载 作者:行者123 更新时间:2023-12-01 18:06:24 27 4
gpt4 key购买 nike

当我遇到这个查询时,我正在整理一些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

然后将另外 2 个表加入到该表中

最佳答案

毫无疑问,SQL2008R2 服务器中的联接顺序会影响查询性能,特别是在存在大量表联接且对多个表应用了 where 子句的查询中。

虽然连接顺序在优化时发生了变化,但优化器不会尝试所有可能的连接顺序。当它找到它认为可行的解决方案时,它就会停止,因为优化行为本身就使用了宝贵的资源。

我们已经看到,仅仅通过更改连接表达式的顺序,执行得像狗一样的查询(1 分钟 + 执行时间)就可以降低到亚秒级的性能。但请注意,这些查询在多个表上有 12 到 20 个联接和 where 子句。

诀窍是设置顺序以帮助查询优化器找出有意义的内容。您可以使用强制命令,但这可能过于严格。尝试确保您的连接顺序从通过 where 子句减少数据最多的表开始。

关于sql - Sql JOIN顺序会影响性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16360860/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com