CTE 运行多少次

scr*_*r78 8 sql-server cte sql-server-2008-r2

如果我有一个 cte,例如下面的代码。表 People 被查询多少次?我的印象是它只被调用了 1 次并存储在内存中,但我一直在运行的一些查询似乎运行的时间比它们应该的要长得多。这让我相信它可能会击中 People Table 3 次。

with ctegeneric as (select person from people where person = 'dumb')
Select * from ctegeneric 
UNION ALL
Select * from ctegeneric 
UNION ALL
Select * from ctegeneric 
Run Code Online (Sandbox Code Playgroud)

pap*_*zzo 7

撇开语法不正确(在编辑之前)。

不,它不会被放入内存中。

一个恰当的例子是连接。它将在循环连接中多次调用。在昂贵的 CTE 上多次调用然后实现 #temp 是要走的路。