SQL Server查询问题

时间:2016-07-26 11:22:45

标签: sql sql-server-2012

我们的实时项目有一个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

1 个答案:

答案 0 :(得分:0)

我看到这两个查询都是类似的,但跟踪器ID的例外情况如此......我的最佳猜测是,此查询可能是Parameter sniffing的受害者..

尝试使用如下所示的选项(重新编译)来查看这是否是原因并按照上述链接中提到的文章进行解决

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)