相关疑难解决方法(0)

使用游标改进基于 SET 的方法的查询

我仍然是查询优化的新手,我有一个存储过程,它使用游标遍历表中的每一行,并执行以下操作:

  1. 计算每行之间的时间差
  2. 计算每行之间的距离
  3. 如果距离 < 5 AND TimeDifference > 3 分钟,则添加到 TEMP 表

我尝试将此 Cursor 转换为 WHILE 循环,但性能下降。所以我需要帮助将其转换为SET BASED方法而不是Procedural Based方法

所以 Cursor 执行这个逻辑:

-- READ Current Row into Cursor Variables
FETCH NEXT FROM crAssetIgnitionOnOff INTO
              @current_iVehicleMonitoringID
            , @current_iAssetID
            , @current_dtUTCDateTime
            , @current_sptGeoLocationPoint
            , @current_fLatitude
            , @current_fLongitude
            , @current_fAngle
            , @current_fSpeedKPH 
            , @current_sIgnitionStatus
            , @current_eEventCode
            , @current_sEventCode

IF(@current_iAssetID = @prev_iAssetID)
    BEGIN

        ---- Calculate Time Difference from previous Point
    DECLARE @diffInSeconds INT
        SET @diffInSeconds = DATEDIFF(SECOND, @prev_dtUTCDateTime, @current_dtUTCDateTime) …
Run Code Online (Sandbox Code Playgroud)

performance sql-server optimization cursors sql-server-2012 query-performance

1
推荐指数
1
解决办法
3126
查看次数