SQL Server查询问题

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

我们的live项目中有一个SQL Server 2012数据库,包括多个表和记录,基本上,我们在一个表上面临一个SQL查询问题,其中包含两个相同的SQL查询。第一个SQL查询的执行时间更短,第二个SQL查询的执行速度非常慢

我不知道为什么会有人能帮我解决这个问题? 下面给出了我们的两个问题

第一个查询执行时间太长:

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:我建议您在实现重新编译选项之前阅读此内容。。