Sql server 以CTE为例证明其优于游标

Sql server 以CTE为例证明其优于游标,sql-server,sql-server-2005,cursor,common-table-expression,Sql Server,Sql Server 2005,Cursor,Common Table Expression,我读到CTE比游标好。但我找不到一个简单明了的例子来证明这一点。我是Sql Server 2005的新手,为了理解它,我需要一个简单的示例,其中我们通过CTE存储值并逐个处理。如果使用游标,则会逐个执行行序列,因为它一次只获取一行。因此,当我们在具有更多行的表中使用游标时,需要更多的时间。CTE在递归场景中产生更快的结果。重复使用CTE的结果来获得最终结果集。因此,既然您在CTE中使用了where子句或子查询,它肯定会显示性能的改进。虽然游标的执行流是同步的(它一个接一个地执行),但肯定需要更多

我读到CTE比游标好。但我找不到一个简单明了的例子来证明这一点。我是Sql Server 2005的新手,为了理解它,我需要一个简单的示例,其中我们通过CTE存储值并逐个处理。

如果使用游标,则会逐个执行行序列,因为它一次只获取一行。因此,当我们在具有更多行的表中使用游标时,需要更多的时间。

CTE在递归场景中产生更快的结果。重复使用CTE的结果来获得最终结果集。因此,既然您在CTE中使用了where子句或子查询,它肯定会显示性能的改进。虽然游标的执行流是同步的(它一个接一个地执行),但肯定需要更多的时间。 参考:

请注意,在许多情况下,临时表的性能也比CTE好,因此您也应该尝试使用临时表。

参考资料:

您如何编写和基准测试一些?“我需要一个简单的示例,其中我们通过CTE存储值并逐个处理”-您可以使用CTE一次处理一条记录吗?我认为它们是一种用虚拟临时变量定义查询的方法tables@Mitch我将尝试发布一些查询,你们可以帮助我转换成CTE。我想那将是我学习的好主意。@Rup谢谢你的回复。作为一个初学者,我脑子里还有几个其他相关的问题。@Zerotoinfinite:一个更好的主意是让你转换;这样你就可以练习并变得更好。