使用CTE有什么缺点?

问题描述 投票:0回答:2

我只是很好奇,实际上不知道使用 CTE 的缺点是什么?我知道优点,但我只想知道缺点,非常感谢。

sql-server
2个回答
1
投票

我发现 CTE 的一个限制是 CTE 的范围仅限于 cte 定义之后的下一个 sql 语句。

;WITH cte As (SELECT col1,col2, Row_number() over(partition by col3 order by id) as rowNum
FROM table) 

SELECT * FROM cte WHERE rowNum=1
SELECT * FROM cte WHERE rowNum >1 -- ERROR occurs as cte defined can be used only uptil next statement of cte definition done by using WITH clause

0
投票

虽然这是一个老问题,但我已经回答了它,因为除非您是高级 MSSQL 开发人员或遇到过这种情况,否则通常无法获得答案。

与其他数据库中的 CTE 相比,MSSQL 中的 CTE 有一些缺点。 MSSQL CTE 每次用于连接依赖查询时都会进行评估。 在其他数据库中并非如此。因此,CTE 的使用在其他数据库中是最佳的,而不是在 MSSQL 中。在许多情况下,多次评估 CTE 会适得其反。 MSSQL CTE 不像其他数据库那样支持 DISTINCT、GROUP BY

有关更多详细信息以及不同数据库之间的比较,请访问我在 Linkedin 上的博客。

https://www.linkedin.com/pulse/ctesubquery-factoring-optimization-raja-surapaneni-jyjie/

© www.soinside.com 2019 - 2024. All rights reserved.