我有此視圖vMobileHistory_MobileRegion
其是這樣的:SQL服務器:分組列的連續值
strUnitID strDate strTime iMobileHistory isValidRegion
---------------------------------------------------------------
352848028160311 1394/11/01 10:35:16 33029937 0
352848028160311 1394/11/01 10:35:17 33029938 0
352848028160311 1394/11/01 10:35:18 33029939 1
352848028160311 1394/11/01 10:35:19 33029940 1
352848028160311 1394/11/01 10:35:20 33029941 1
352848028160311 1394/11/01 10:35:22 33029942 0
352848028160311 1394/11/01 10:35:25 33029943 0
352848028160311 1394/11/01 10:35:28 33029944 0
352848028160311 1394/11/01 10:35:34 33029945 1
352848028160311 1394/11/01 10:35:35 33029946 1
索引是:
ClusterdIndex, strUnitID ASC, strDate DESC, strTime DESC
NonClusterdIndex, iMobileHistory ASC
NonClusterdIndex, strDate ASC, strTime ASC
NonClusterdIndex, strUnitID ASC, strDate ASC
我已經基於連續值這個查詢是到組行「isValidRegion」
SELECT
strUnitID,
strDate,
strTime,
isValidRegion,
iMobileHistory,
(ROW_NUMBER() OVER (PARTITION BY strUnitId ORDER BY strDate, strTime)
-
ROW_NUMBER() OVER (PARTITION BY strUnitId, isValidRegion ORDER BY strDate, strTime)
) AS grp
FROM
vMobileHistory_MobileRegion
GROUP BY
strUnitID, strDate, isValidRegion, grp
的問題是,vMobileHistory_MobileRegion
擁有超過行的100M和使用ROW_NUMBER()
導致所有行的計算結果爲ROW_NUMBER()
,這些行非常慢,並且由於大量數據不適合內存,導致在tempdb
中排序數據。
有沒有其他方式沒有使用ROW_NUMBER()
?
其實,我需要時間持續時間isValidRegion
你想用row_number函數來計算什麼? –
這是計算兩個不同分區的RowNumber的差異以確定「isValidRegion」是否連續。 –
您是否有任何索引?這不是'ROW_NUMBER()'導致的主要性能問題,排序100M記錄速度很慢。 –