SQL Server查询问题
我们的live项目中有一个SQL Server 2012数据库,包括多个表和记录,基本上,我们在一个表上面临一个SQL查询问题,其中包含两个相同的SQL查询。第一个SQL查询的执行时间更短,第二个SQL查询的执行速度非常慢 我不知道为什么会有人能帮我解决这个问题? 下面给出了我们的两个问题 第一个查询执行时间太长:SQL Server查询问题,sql,sql-server-2012,Sql,Sql Server 2012,我们的live项目中有一个SQL Server 2012数据库,包括多个表和记录,基本上,我们在一个表上面临一个SQL查询问题,其中包含两个相同的SQL查询。第一个SQL查询的执行时间更短,第二个SQL查询的执行速度非常慢 我不知道为什么会有人能帮我解决这个问题? 下面给出了我们的两个问题 第一个查询执行时间太长: SELECT * FROM (SELECT TOP 10 TrackerResponse.EventName,TrackerResponse.ReceiveTime,ISNull(T
SELECT * FROM (SELECT TOP 10 TrackerResponse.EventName,TrackerResponse.ReceiveTime,ISNull(TrackerResponse.InputStatus,0) AS InputStatus,
TrackerResponse.Latitude,TrackerResponse.Longitude,TrackerResponse.Speed,
TrackerResponse.TrackerID,TrackerResponse.OdoMeter,TrackerResponse.Direction,
UserCar.CarNo FROM TrackerResponse
INNER JOIN UserCar ON (UserCar.TrackerID = TrackerResponse.TrackerID)
WHERE (TrackerResponse.EventName IS NOT NULL AND TrackerResponse.EventName<>'')
AND TrackerResponse.TrackerID = 112 Order By ID DESC) AS Events)
第二个查询占用更少的执行时间:
SELECT * FROM (SELECT TOP 10 TrackerResponse.EventName,TrackerResponse.ReceiveTime,ISNull(TrackerResponse.InputStatus,0) AS InputStatus,
TrackerResponse.Latitude,TrackerResponse.Longitude,TrackerResponse.Speed,
TrackerResponse.TrackerID,TrackerResponse.OdoMeter,TrackerResponse.Direction,
UserCar.CarNo FROM TrackerResponse
INNER JOIN UserCar ON (UserCar.TrackerID = TrackerResponse.TrackerID)
WHERE (TrackerResponse.EventName IS NOT NULL AND TrackerResponse.EventName<>'')
AND TrackerResponse.TrackerID = 56 Order By ID DESC) AS Events
我发现这两个查询除了tracker id之外都很相似。所以我最好的猜测是,这个查询可能是 尝试使用下面的选项重新编译,看看这是否是原因,然后按照上面链接中提到的文章进行解决
SELECT * FROM (SELECT TOP 10 TrackerResponse.EventName,TrackerResponse.ReceiveTime,ISNull(TrackerResponse.InputStatus,0) AS InputStatus,
TrackerResponse.Latitude,TrackerResponse.Longitude,TrackerResponse.Speed,
TrackerResponse.TrackerID,TrackerResponse.OdoMeter,TrackerResponse.Direction,
UserCar.CarNo FROM TrackerResponse
INNER JOIN UserCar ON (UserCar.TrackerID = TrackerResponse.TrackerID)
WHERE (TrackerResponse.EventName IS NOT NULL AND TrackerResponse.EventName<>'')
AND TrackerResponse.TrackerID = 56 Order By ID DESC
option(recompile)
AS Events)
检查这两个查询的执行计划。您是否缺少任何索引?在每种情况下,有多少行符合标准?如果TrackerID=46返回的行数是112的100倍,而您没有任何索引,则查询可能需要100倍以上的时间。发布两个查询的执行计划您确定所有问题都与参数嗅探相关吗???您可以通过查看执行计划并检查预期行与实际行,使用选项重新编译查询所需时间比以前的执行时间少6秒。这可能是一个新问题,请发布查询,执行计划、涉及表的模式和每个表的计数table@Sahityakanral:我建议您在实现重新编译选项之前阅读此内容。。