Sql 在CTE中获取Count()将导致表扫描
我有以下疑问:Sql 在CTE中获取Count()将导致表扫描,sql,sql-server,common-table-expression,Sql,Sql Server,Common Table Expression,我有以下疑问: ;WITH CTE AS ( SELECT ROW_NUMBER() OVER ( ORDER BY RTT.DAYSTOWAIT DESC ) AS ROW ,COUNT(*) OVER () AS ROWCNT --... -- ADDITIONAL COLUMNS --... FROM TABLE1 T1 INNER JOIN TABLE2 T2 ON T1.OI
;WITH CTE
AS (
SELECT ROW_NUMBER() OVER (
ORDER BY RTT.DAYSTOWAIT DESC
) AS ROW
,COUNT(*) OVER () AS ROWCNT
--...
-- ADDITIONAL COLUMNS
--...
FROM TABLE1 T1
INNER JOIN TABLE2 T2 ON T1.OID = T2.OID
INNER JOIN ORG ON T1.ORGOID = ORG.OID
INNER JOIN EPI E ON E.OID = T1.EOID
AND E.PKEY = T1.PKEY
AND E.STATUS = 'A'
INNER JOIN PATHWAY ON OID = EPI.PATHWAYOID
AND PATHWAY.PARTKEY = T1.PARTKEY
AND PATPATHWAY.STATUS = 'A'
)
SELECT CTE.ROW
,CTE.ROWCNT
FROM CTE
使用Cte.RowCount选择Cte时,会导致表格扫描,
但是当我从select中删除“RowCount”列时,它工作得很好(seek)
是否有更有效的方法获取count()?请添加表和执行计划的索引。是否尝试将
count(*)
移到构建CTE结果集的位置之外<代码>从CTE中选择CTE.ROW,COUNT(*)?是的,我尝试过,但仍会导致表格扫描