[英]RowNumber() Over(Order By x) with a subquery not working
“計數”查詢運行良好。 只要注釋部分保持原樣,“記錄頁面”查詢就可以正常運行。 如果不加注釋,它將永遠不會返回...繼續前進。 任何幫助如何克服這一困難將不勝感激。
-- Page or records
DECLARE @p0 int;
DECLARE @p1 int;
SET @p0 = 100;
SET @p1 = 20;
SELECT DISTINCT ZIP_CODE, RowNum
FROM ( SELECT ROW_NUMBER() OVER (ORDER BY ZIP_CODE) as RowNum, ZIP_CODE
FROM ODS.PHP1300_DWH.FACETS_MEMBER
--WHERE LEFT(ZIP_CODE, 5) NOT IN (SELECT SHORT_ZIP_CODE
-- FROM DWH.Reference.R_ZIP_CODE)
) AS x
WHERE RowNum BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY RowNum
-------------------------------------------------------------------------------------
-- Count
SELECT COUNT(ZIP_CODE)
FROM ODS.PHP1300_DWH.FACETS_MEMBER
WHERE LEFT(ZIP_CODE, 5) NOT IN (SELECT SHORT_ZIP_CODE
FROM DWH.Reference.R_ZIP_CODE)
我認為您在派生表中的謂詞非常昂貴。 沒有執行計划很難說。 您可以采取以下幾種措施:
LEFT(FACETS_MEMBER.ZIP_CODE, 5)
成為計算列並為其編制索引 R_ZIP_CODE.SHORT_ZIP_CODE
有索引 R_ZIP_CODE.SHORT_ZIP_CODE
具有NOT NULL
約束。 除此之外,我認為您在外部查詢中使用的DISTINCT
關鍵字是無用的,因為您要添加RowNum
,無論如何,這對於每條記錄都是不同的。 因此,您應該將DISTINCT
移到嵌套查詢中,該查詢應使用DENSE_RANK()
而不是ROW_NUMBER()
,如此處所述:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.