【发布时间】:2013-01-23 05:50:48
【问题描述】:
我对 WITH 语句 (CTE) 的理解是,它每次查询都执行一次。使用这样的查询:
WITH Query1 AS ( ... )
SELECT *
FROM
SomeTable t1
LEFT JOIN Query1 t2 ON ...
如果这导致 100 行,我希望 Query1 只执行一次 - 而不是 100 次。如果该假设正确,则运行整个查询所花费的时间大致等于:运行 Query1 + 从 SomeTable 中选择 + 将 SomeTable 连接到 Query1 所花费的时间。
我的情况是:
-
Query1单独运行大约需要 5 秒(40 万行)。 - 删除
WITH语句和LEFT JOIN后查询的剩余部分需要大约15 秒(400k 行)。
因此,当使用 WITH 语句和 LEFT JOIN 运行整个查询时,我希望查询能够及时完成,但我让它运行了一个多小时一次停止它只得到了 11k 行。
我显然错了,但为什么呢?
【问题讨论】:
标签: sql-server performance sql-server-2008 common-table-expression with-statement